在MVC 5应用程序中,我有一个像这样的ActionLink视图:
@Html.ActionLink("Publish", "Index", "Publish", item, null)
当我将鼠标悬停在链接上时,该网址会显示以下内容将作为参数发送到视图:
?Title=FilePicker&Language=JavaScript
如何访问这些参数以便我可以在第二个视图中显示它们?
例如,我尝试执行以下操作,但不知道需要进入Value属性:
<input type="text" class="form-control" id="search" value="NEED TO ACCESS TITLE PARAM HERE" />
答案 0 :(得分:3)
使用:
<input type="text" class="form-control" id="search" value="@Request.QueryString["Title"]" />
为了在模型,视图和控制器之间实现更清晰的分离,建议控制器将标题发送给视图。但这也很好。
答案 1 :(得分:1)
您最好的选择是将这些值绑定到Index
操作中的操作参数,并将它们添加到视图模型中。下面的一些变化应该会看到你:
public ActionResult Index(string title, string language)
{
var model = new PublishIndexViewModel { Title = title, Language = language };
return View(model);
}
然后在你看来:
@model PublishIndexViewModel
...
<input type="text" class="form-control" id="search" value="@Model.Title" />
这更符合ASP.NET MVC&#34;最佳实践&#34;模式比 - 并且优先 - 直接处理Request.QueryString
,并且可以轻松地适应您已有的任何现有视图模型。
答案 2 :(得分:0)
@AntP是正确的。 MVC的首选方法是让动作接受参数。但是,如果不这样做,你应该使用:
Request.Unvalidated["myParam"]
无论是作为URL路径还是查询字符串的一部分传递,以及是否将其作为action方法的参数接受,都将返回参数。无论如何处理,它都可以保证返回值。
.Unvalidated
部分是关闭模型验证,只要你试图从Request
对象中提取任何内容,它就会愚蠢地运行。