表格收集问题

时间:2014-02-13 05:47:46

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

我在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();
}

我的问题是,有时候第二个文本框不可见..那个时候我不想收集值。当我按下按钮时,在同名表格中生成相同类型的输入字段(我可以添加)很多输入框)。那我怎么能在我的控制器中收集所有这些。请帮帮我..

3 个答案:

答案 0 :(得分:5)

在您的情况下,您可以使用同名“SeachValue”的所有文本框。

  

string searchvalue = collection.Get("SearchValue");

这会将所有文本框值返回为逗号分隔字符串,您可以将其拆分并进一步使用。

查看截屏 enter image description here

html

enter image description here

和结果

enter image description here

答案 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时使用正确的名称。因为所有绑定都取决于命名本身。