1

如果我的 ViewModel 有一些子属性:

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

我为这个属性渲染了一个表单,然后我可以得到以下 ActionResult:

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

并且 DefaultModelBinder 填充表单属性(如果 ViewModel 的属性名称等于操作参数名称)。

IList<MyFormViewModel>但是,如果 MyViewModel 包含由 index: 呈现的操作参数,我应该如何命名@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

如果你

实际上不需要发布列表,我希望能够发布列表的一种形式

那么就不要使用@Html.EditorFor(x => x.Forms[index]). 利用

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

在这种情况下,您的操作参数的名称无关紧要。

于 2012-10-24T08:58:15.590 回答