MVC ActionLink在场景后面设置了ViewBag

时间:2014-01-30 07:40:15

标签: asp.net-mvc asp.net-mvc-4

我有一个

@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在场景后面传递隐藏值并在不同操作中获取该值而用户没有注意到任何差异?

2 个答案:

答案 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" });
}

输出 -

enter image description here

并且在q中,您可以获得查询字符串。