2014-09-24 22 views
1

當我去到的ReportsController索引視圖有時我得到這樣的鏈接:如果查詢字符串包含某些參數,如何在Razor視圖中顯示鏈接?

http://localhost:17697/Reports 

有時像這樣從我從哪裏來取決於:

http://localhost:17697/Reports?personId=15 

我想顯示這個按鈕:

@Html.ActionLink("Back to person", "Person", new { id = PERSON_ID_FROM_QUERYSTRING }, new { @class = "btn btn-info btn-xs" }) 

如果?personId存在於(是鏈接的一部分)。

如何做?

回答

2

的URL參數可以在Request屬性訪問。

所以,你可以檢查此特定請求Request["personId"],如果不爲空,寫操作:

@{ 
    string pid = Request["personId"]; 
    if(!String.IsNullOrEmpty(pid)) { 
     @Html.ActionLink("Back to person", "Person", new { id = pid }, new { @class = "btn btn-info btn-xs" }); 
    } 
} 
0

假設PERSONID是模型的一部分,您可以在視圖中引用它:

@Html.ActionLink("Back to person", "Person", new { id = Model.PersonId }, 
       new { @class = "btn btn-info btn-xs" }) 
+0

這不是我的模型的一部分。這只是我查詢限制的一部分。如果它是我模型的一部分,我可以檢查它是否爲空。 – Yoda 2014-09-24 16:01:55

+0

你可以隨時添加它。 – jrummell 2014-09-24 17:09:48

0

可以使用的RouteData字典是這樣的:

@Html.ActionLink("Back to person", "Person", new { id = ViewContext.RouteData.Values["personId"]} 

對於更復雜情景,請看this post

+0

是的,但如何檢查查詢參數是否存在? – Yoda 2014-09-24 16:02:47

+0

您需要檢查字典是否包含給定鍵的值。這也適用於Request.Querystring。我會建議在控制器中執行檢查,並通過使用視圖模型將布爾值傳遞給視圖,或者僅更新模型的PersonId屬性 – elolos 2014-09-24 16:07:04

1

也許你意識到這一點,只是試圖避免控制器這樣做,但只是爲了完整性,我會包括哪些通常是在MVC檢索查詢字符串PARAMS常見的做法:

public class HomeController { 

    public ActionResult Reports(int? personId) // this indicates optional query string param 
    { 
     vm = new ReportsViewModel{ PersonId = personId; }; 
     vm.Reports = Repository.GetReports(); 
     return View(vm); 
    } 
} 

CSHTML:

@if(Model.PersonId != null) 
{ 
    Html.ActionLink("Back to person", "Person", new { id = Model.PersonId }, new { @class = "btn btn-info btn-xs" }) 
} 
相關問題