我有一个
@Html.ActionLink("Search text", "Search", new { q="searchtext1" });
转到:
http://website2312143.com/search/searchtext1
我希望在幕后设置实际搜索文本为"searchtext2"
,因此我尝试将此值传递给Search
操作,但仍显示http://website2312143.com/search/searchtext1用户。
在Search
操作中,我试图从ViewBag
或任何其他机制获取“searchtext2”并显示数据。
实际值与url参数不同的原因是因为从控制器调用的WCF Web服务需要稍微不同的参数才能正确显示数据。
无论如何使用@Html.ActionLink
在场景后面传递隐藏值并在不同操作中获取该值而用户没有注意到任何差异?
答案 0 :(得分:1)
不直接,因为ActionLink
只会生成一个网址(GET
)。
您可以创建一个将action
设置为ActionLink
网址的简短表单(您也可以使用@Url.Action("Search text", "Search", new { q="searchtext1" })
),然后设置<input type='hidden' value='searchtext2' />
。这将为您提供所需的URL以及传递隐藏变量。
@using (Html.BeginForm("Search text", "Search", new { q = "searchtext1" })
{
@Html.Hidden("searchtext2", "second search text")
<input type="submit" value="Search!" class="override so i don't look like a button" />
}
答案 1 :(得分:1)
你必须以稍微不同的方式做到这一点 -
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
$('#me').click(function (e) {
e.preventDefault();
$(this).parents('form').first().submit();
});
});
</script>
@using (Html.BeginForm("Search", "Search", new { q = "searchtext1" }, FormMethod.Post))
{
@Html.Hidden("OriginalSearchText", "SearchStringOriginal");
@Html.ActionLink("Search text", "Search", null, new { id = "me" });
}
输出 -
并且在q中,您可以获得查询字符串。