1

という名前の属性の変数セットを持つエンティティがあり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). しかし、これらの変数のプロパティを統合する方法が見つかりませんでした。

ありがとう。

4

2 に答える 2

5

コントローラー メソッドに渡された FormCollection オブジェクトを使用してみましたか?

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

  ...
}

そのコレクション内のアイテムをたどってみます。

于 2013-07-08T18:34:11.927 に答える
2

あなたが次のものを持っているとしましょう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]
  //...
}
于 2013-07-08T19:30:24.977 に答える