C# Html.BeginForm不携带其当前参数

C# Html.BeginForm不携带其当前参数,c#,html,asp.net-mvc,razor,C#,Html,Asp.net Mvc,Razor,我有一个简单的表单,如下所示: @using (Html.BeginForm("search", "home", new { param1 = "value1" }, FormMethod.Get )) { @Html.TextBox("Search", ViewBag.Search as string) <button type="submit">Search </button> } <form action="/home/search?p

我有一个简单的表单,如下所示:

@using (Html.BeginForm("search", "home", new { param1 = "value1" }, FormMethod.Get ))
{
     @Html.TextBox("Search", ViewBag.Search as string)
     <button type="submit">Search </button>
}
 <form action="/home/search?param1=value1" method="get">  
     <input id="Search" name="Search" type="text" value="">
     <button type="submit">Search </button>
 </form>
public ActionResult Search(string param1, string search)  
{
    // param1 returns as "null" 
    // search contains the value that was inside the textbox
}

有人知道我做错了什么吗?

塞尔曼22提出了实现这一目标的正确方法。您没有将参数放在实际的URL上,而是将它们放在隐藏的形式中

@using (Html.BeginForm("search", "home", null, FormMethod.Get ))
{
     <input type="hidden" name="param1" value="@ViewBag.Param1Value.ToString()" /> 
     @Html.TextBox("Search", ViewBag.Search as string)
     <button type="submit">Search </button>
}
@使用(Html.BeginForm(“search”、“home”、null、FormMethod.Get))
{
@TextBox(“搜索”,ViewBag.Search作为字符串)
搜寻
}

谢谢

一些建议

  • 将你的表格与帖子一起使用
  • 我总是建议使用强类型的视图模型,它有很多好处
因此,您的代码变成:

public class SearchViewModel {
    public string param1 {get;set;}
    public string search {get;set;}
}

[HttpPost] // <-- were you missing this before?
public ActionResult Search(SearchViewModel model)  
{
   // access with model.param1
}

@model SearchViewModel

@using (Html.BeginForm("search", "home", FormMethod.POST ))
{
     @Html.HiddenFor(x=>x.param1)
     @Html.TextBoxFor(x=>x.search)
     <button type="submit">Search </button>
}
公共类SearchViewModel{
公共字符串param1{get;set;}
公共字符串搜索{get;set;}
}
[HttpPost]//x.param1)
@Html.TextBoxFor(x=>x.search)
搜寻
}

您可以为
param1
创建一个
隐藏字段
,也可以使用helper方法。:)