在ASPMVC中获取变量数量未知的post数据

本文关键字:未知 post 数据 ASPMVC 获取 变量 | 更新日期: 2023-09-27 18:21:36

我有一个实体,它有一组名为ExtendedProperty的可变属性,这些属性有一个键和一个值。

在我的html剃刀视图中,我有这样的:

@if (properties.Count > 0)
{
    <fieldset>
        <legend>Extended Properties</legend>
            <table>
            @foreach (var prop in properties)
            {
                <tr>
                    <td>
                        <label for="Property-@prop.Name">@prop.Name</label>
                    </td>
                    <td>
                        <input type="text" name="Property-@prop.Name" 
                               value="@prop.Value"/>
                    </td>
               </tr>
            }
            </table>
        </fieldset>
}

用户填写后,我如何在控制器上访问这些数据?有没有一种方法可以做到这一点,这样我就可以使用模型绑定而不是手动html?

EDIT=请注意,我仍在使用一个模型,表单中还有其他东西确实使用了@Html.EditFor(m => m.prop)之类的东西。但我找不到将这些可变属性集成到.中的方法

谢谢。

在ASPMVC中获取变量数量未知的post数据

您是否尝试过使用传递给控制器方法的FormCollection对象?

[HttpPost]
public ActionResult Index(FormCollection formCollection)
{
  foreach (string extendedProperty in formCollection)
  {
     if (extendedProperty.Contains("Property-"))
     {
       string extendedPropertyValue = formCollection[extendedProperty];
     }
  }
  ...
}

我会尝试遍历该集合中的项目。

假设您有以下ModelViewModel,我更喜欢):

public class ExtendedProperties
{
  public string Name { get; set; }
  public string Value { get; set; }
}
public class MyModel
{
  public ExtendedProperties[] Properties { get; set; }
  public string Name { get; set; }
  public int Id { get; set; }
}

您可以使用以下标记将此模型绑定到视图:

@using (Html.BeginForm("YourAction", "YourController", FormMethod.Post))
{
  <input type="text" name="Name" />
  <input type="number" name="Id" />
  <input type="text" name="Properties[0].Name" />
  <input type="text" name="Properties[0].Value" />  
  ...
  <input type="text" name="Properties[n].Name" />
  <input type="text" name="Properties[n].Value" />  
}

最后,你的行动:

[HttpPost]
public ActionResult YourAction(MyModel model)
{
  //simply retrieve model.Properties[0]
  //...
}