我有一个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();
}我的问题是有时第二个文本框是不可见的。当我按下add按钮时,我不想收集values.And,在具有相同名称的表单中生成相同类型的输入框(我可以添加许多输入框)。那么我如何在我的控制器中收集所有这些。请帮帮我..
发布于 2014-02-13 14:12:07
您可以在大小写中包含具有相同名称"SeachValue“的所有文本框。
string searchvalue = collection.Get("SearchValue");
这将以逗号分隔字符串的形式返回所有文本框值,您可以将其拆分并进一步使用。
查看屏幕截图

这个html

和结果

发布于 2014-02-13 18:13:21
您可以使用以下代码获取所有同名文本框的值:
var results = ((String[])formcollection.GetValue("mytxt").RawValue).ToList();
foreach (var item in results)
{
//string name = item;
}发布于 2014-02-14 21:17:04
当您动态添加元素时,请确保还为其设置了名称。因此,当您添加新的输入元素时,它必须是
<input type="text" name="NewTextBox" class="form-control input-sm" placeholder="Value" name="searchvalue">这样,无论你添加多少个文本框,所有的文本框都将具有相同的名称。一旦你张贴了表格。在您的控制器中执行此操作。
[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[]
}或
您可以使用Request.form["NewTextBox"] as检索它们
[HTTPPOST]
public ActionResult Search(MyModel newModel)
{
var values = Request.Form[NewTextBox];
}但我建议您使用第一种方法,即使用MVC Model Binder来处理所有事情。您将只需要处理一组值。
注意:总是确保你的名字是正确的,并且在使用MVC时使用正确的名字。因为所有的绑定都依赖于命名本身。
https://stackoverflow.com/questions/21746218
复制相似问题