【问题标题】:Form Collection issue表单收集问题
【发布时间】:2016-11-16 19:14:40
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    在您的情况下,您可以拥有所有具有相同名称“SeachValue”的文本框。

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

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

    查看屏幕截图

    html

    结果

    【讨论】:

    • 它在同一行的情况下,按下按钮后+ 再次生成总计我必须收集 4 个文本框值
    • 无论有多少文本框,如果它们有保存“名称”,它们都会在保存表单集合键下发布到操作。
    【解决方案2】:

    您可以使用以下代码获取所有具有相同名称的文本框的值:

        var results = ((String[])formcollection.GetValue("mytxt").RawValue).ToList();
                foreach (var item in results)
                {
                    //string name = item;
                }
    

    【讨论】:

      【解决方案3】:

      当您动态添加元素时,请确保您还为其设置了名称。所以当你添加一个新的输入元素时,它必须是

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-30
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 2010-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多