1

ViewModel に子プロパティがある場合:

public class MyViewModel
{
   public MyFormViewModel Form {get;set;}
}

このプロパティのフォームをレンダリングすると、次の ActionResult を取得できます。

[HttpPost]
public ActionResult SomeAction(MyFormViewModel form)
{
   ...
}

DefaultModelBinder はフォーム プロパティを埋めます (ViewModel のプロパティ名がアクション パラメータ名と等しい場合)。

IList<MyFormViewModel>しかし、MyViewModel にインデックスによってレンダリングされるものが含まれている場合、どのようにアクション パラメータに名前を付ける必要があります@Html.EditorFor(x => x.Forms[index])か?

4

3 に答える 3

3

これを試して:

コントローラ:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var myViewModel = new MyViewModel()
            {
                Form = new MyFormViewModel {Name = "Header"},
                FormViewModels = new List<MyFormViewModel>()
                                     {
                                         new MyFormViewModel() {Name = "First"},
                                         new MyFormViewModel() {Name = "Secound"}
                                     }
            };

        return View(model: myViewModel);
    }
    [HttpPost]
    public ActionResult Index(FormCollection collection, List<MyFormViewModel> FormViewModels, MyViewModel myView)
    {
        return View();
    }

}

モデル:

public class MyViewModel
{
    public MyFormViewModel Form { get; set; }
    public IList<MyFormViewModel> FormViewModels { get; set; } 
}

public class MyFormViewModel
{
    public string Name { get; set; }
}

意見:

@model MvcChat.Models.MyViewModel
@{
    ViewBag.Title = "Home Page";
}

@using(Html.BeginForm())
{
    @Html.EditorFor(model=>model.Form.Name)

    for (int i = 0; i < Model.FormViewModels.Count; i++)
    {
        @Html.EditorFor(x => x.FormViewModels[i])
    }
    <input type="submit" value="go"/>
}

結果は次のようになります ( http://i.stack.imgur.com/t0Je0.png ):

結果

于 2012-10-30T19:24:34.293 に答える
1

私はこれまでに似たようなことをしたことはありませんが、可能であれば(それが可能かどうかはわかりません)、ここで古いが良い出発点を見つけることができます。お役に立てば幸いです。

于 2012-10-30T17:33:28.870 に答える
1

もし、あんたが

実際にはリストを投稿する必要はありません。リストの 1 つの形式を投稿できるようにしたい

を使用しないでください@Html.EditorFor(x => x.Forms[index])。使用する

var element = x.Forms[index]
@Html.EditorFor(x => element)

その場合、アクション パラメータの名前は重要ではありません。

于 2012-10-24T08:58:15.590 に答える