Asp.net mvc MVC ActionLink在幕后设置ViewBag

Asp.net mvc MVC ActionLink在幕后设置ViewBag,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我有一个 @Html.ActionLink("Search text", "Search", new { q="searchtext1" }); 这涉及到: 我想在幕后设置实际的搜索文本是“searchtext2”,因此我试图将此值传递给搜索操作,但仍然显示给用户 在Search操作中,我试图从ViewBag或任何其他机制获取“searchtext2”并显示数据 实际值与url参数不同的原因是,从控制器调用的WCF webservice需要稍微不同的参数来正确显示数据 是否仍然可以使用@Ht

我有一个

@Html.ActionLink("Search text", "Search", new { q="searchtext1" });
这涉及到:

我想在幕后设置实际的搜索文本是
“searchtext2”
,因此我试图将此值传递给
搜索
操作,但仍然显示给用户

Search
操作中,我试图从
ViewBag
或任何其他机制获取“searchtext2”并显示数据

实际值与url参数不同的原因是,从控制器调用的WCF webservice需要稍微不同的参数来正确显示数据


是否仍然可以使用
@Html.ActionLink
在幕后传递隐藏值,并在不同的操作中获取该值,而用户不会注意到任何差异

不是直接的,因为
ActionLink
只会生成一个URL(一个
GET

您可以创建一个简短表单,将
操作设置为
操作链接
url(您可以使用
@url.action(“搜索文本”、“搜索”,new{q=“searchtext1”})
),然后设置
。这将为您提供所需的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" />
}
@使用(Html.BeginForm(“搜索文本”,“搜索”,新的{q=“searchtext1”})
{
@隐藏(“搜索文本2”,“第二搜索文本”)
}

您必须以稍微不同的方式进行操作-

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

$(函数(){
$('#me')。单击(函数(e){
e、 预防默认值();
$(this.parents('form').first().submit();
});
});
@使用(Html.BeginForm(“Search”,“Search”,new{q=“searchtext1”},FormMethod.Post))
{ 
@隐藏(“OriginalSearchText”、“SearchStringOriginal”);
@ActionLink(“搜索文本”,“搜索”,空,新{id=“me”});
}
输出-


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

是否要使用类似“q=viewbag.something”的内容?如果我这样做,用户将看到URL为/search/searchtext2。我仍然希望向用户显示/search/searchtext1,并将“searchtext2”传递到幕后的目标操作。我希望此链接能帮助您。