我在mvc
中有一个html开始表单@using (Html.BeginForm("Search", "Reports",FormMethod.Post, new { enctype = "multipart/form-data", @class = "form-inline" }))
{
<div class="form-group">
<input type="text" class="form-control input-sm" placeholder="Value" name="SearchValue">
<input type="text" class="form-control input-sm second-value" placeholder="Value" style="display:none;" name="SearchValue1">
<button type="button" class="btn btn-default btn-Add">+</button>
</div>
<div id="othersearch"></div>
<input type="submit" value="Search" class="btn btn-primary" />
}
我想在一个控制器中发布此表单项
public ActionResult Search(FormCollection collection)
{
string searchvalue = collection.Get("SearchValue");
return View();
}
我的问题是,有时候第二个文本框不可见..那个时候我不想收集值。当我按下按钮时,在同名表格中生成相同类型的输入字段(我可以添加)很多输入框)。那我怎么能在我的控制器中收集所有这些。请帮帮我..
答案 0 :(得分:5)
在您的情况下,您可以使用同名“SeachValue”的所有文本框。
string searchvalue = collection.Get("SearchValue");
这会将所有文本框值返回为逗号分隔字符串,您可以将其拆分并进一步使用。
查看截屏
html
和结果
答案 1 :(得分:0)
您可以使用以下代码获取具有相同名称的所有文本框的值:
var results = ((String[])formcollection.GetValue("mytxt").RawValue).ToList();
foreach (var item in results)
{
//string name = item;
}
答案 2 :(得分:0)
当您动态添加元素时,请确保也为其设置名称。所以当你添加一个新的输入元素时,它必须是
<input type="text" name="NewTextBox" class="form-control input-sm" placeholder="Value" name="searchvalue">
因此,无论您添加多少文本框,All都会有相同的名称。一旦发布表格。在您的控制器中执行此操作。
[HTTPPOST]
public ActionResult Search(MyModel newModel,string[] NewTextBox)
{
// here as you had dynamic textbox with name = NewTextBox you
//will get all its value binded to the above string[]
}
OR
您可以使用Request.form["NewTextBox"]
作为
[HTTPPOST]
public ActionResult Search(MyModel newModel)
{
var values = Request.Form[NewTextBox];
}
但我建议您使用MVC Model Binder
来处理所有事情的第一种方法。您只需要使用数组值。
注意:始终确保您获得正确的名称,并在玩MVC时使用正确的名称。因为所有绑定都取决于命名本身。