Tôi muốn kiểm tra tham số URL trong đánh dấu Razor của mình. Ví dụ: làm cách nào để làm điều gì đó như sau:
<div id="wrap" class="@{if (URL "IFRAME" PARAMETER EQUALS 1) iframe-page}">
Câu trả lời:
<div id="wrap" class=' @(ViewContext.RouteData.Values["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>
EDIT 01-10-2014:
Vì câu hỏi này rất phổ biến nên câu trả lời này đã được cải thiện.
Ví dụ trên sẽ chỉ nhận các giá trị từ RouteData
, vì vậy chỉ từ các chuỗi truy vấn được bắt bởi một số tuyến đã đăng ký. Để nhận được giá trị chuỗi truy vấn, bạn phải truy cập hiện tại HttpRequest
. Cách nhanh nhất là gọi (như TruMan đã chỉ ra) `` Request.Querystring 'nên câu trả lời sẽ là:
<div id="wrap" class=' @(Request.QueryString["iframe"] == 1 ? /*do sth*/ : /*do sth else*/')> </div>
Bạn cũng có thể kiểm tra RouteValues so với QueryString MVC?
CHỈNH SỬA 03-05-2019:
Giải pháp trên đang hoạt động cho .NET Framework.
Như những người khác đã chỉ ra nếu bạn muốn nhận giá trị chuỗi truy vấn trong .NET Core, bạn phải sử dụng Query
đối tượng từ Context.Request
đường dẫn. Vì vậy, nó sẽ là:
<div id="wrap" class=' @(Context.Request.Query["iframe"] == new StringValues("1") ? /*do sth*/ : /*do sth else*/')> </div>
Xin lưu ý rằng tôi đang sử dụng StringValues("1")
trong câu lệnh vì Query
trả về StringValues
struct thay vì pure string
. Đó là cách làm sạch cho cảnh này mà tôi đã tìm thấy.
Nếu bạn đang sử dụng .net core 2.0, điều này sẽ là:
Context.Request.Query["id"]
Sử dụng mẫu:
<a href="@Url.Action("Query",new {parm1=Context.Request.Query["queryparm1"]})">GO</a>
Chúng tôi đề xuất đăng câu trả lời này như một câu trả lời, vì một số câu trả lời khác đang mắc lỗi như 'Tên ngữ cảnh không tồn tại trong ngữ cảnh hiện tại'.
Chỉ cần sử dụng các hoạt động sau:
Request.Query["queryparm1"]
Sử dụng mẫu:
<a href="@Url.Action("Query",new {parm1=Request.Query["queryparm1"]})">GO</a>
Không có câu trả lời nào phù hợp với tôi, tôi nhận được "'HttpRequestBase' không chứa định nghĩa cho 'Truy vấn'", nhưng điều này đã hoạt động:
HttpContext.Current.Request.QueryString["index"]
Tôi nghĩ một giải pháp thanh lịch hơn là sử dụng bộ điều khiển và từ điển ViewData:
//Controller:
public ActionResult Action(int IFRAME)
{
ViewData["IsIframe"] = IFRAME == 1;
return View();
}
//view
@{
string classToUse = (bool)ViewData["IsIframe"] ? "iframe-page" : "";
<div id="wrap" class='@classToUse'></div>
}
return View(new SomeViewModel{ IsIFrame = IFrame });
Đối với Asp.net Core 2
ViewContext.ModelState["id"].AttemptedValue
AttempValue
- nếu tham số không tồn tại trong chuỗi truy vấn, bạn sẽ nhận được một ngoại lệ, vì vậy trước tiên bạn nên kiểm tra:@if (ViewContext.ModelState["id"] != null)...