从MVC视图发布不会绑定到控制器模型

时间:2017-04-12 15:14:26

标签: asp.net-mvc

我有一个局部视图显示在模态窗口上:

public ActionResult Details(string test)
{
    var model = _taskService.GetDocumentTasks(test);

    return PartialView("_Details", new CustomViewModel { TaskList = model.ToList() });
}

public class CustomViewModel
{
    public DocumentStatus Status { get; set; }
    public IList<DocumentTask> TaskList { get; set; }
}

我能够在视图中循环TaskList并绘制表单字段,如下所示:

@model CustomViewModel

@using (Html.BeginForm())
{
    @for (int i = 0; i < Model.TaskList.Count(); i++)
    {
        @Html.HiddenFor(m => m.TaskList[i].TaskId)

        <div class="col-sm-6 col-md-4">
            <img src="@Html.EditorFor(m => m.TaskList[i].DocumentPath)">                                
            .. other form items here
        </div>                    
    } 

<input class="btn btn-primary" type="submit" value="Save" />
}

这会显示表单字段,但是当我单击提交按钮时,发送到控制器的模式为空。我试过几种不同的方法来绑定它但没有成功。以下控制器上的模型始终为null。知道如何将提交的表单详细信息绑定到控制器模型吗?

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Details(CustomViewModel model) 
    {
    }

感谢。

1 个答案:

答案 0 :(得分:0)

这会奏效。我做了一些小改动,所以请按照:

控制器/型号:

public class HomeController : Controller
{
    public class TaskService
    {
        public Collection<DocumentTask> GetDocumentTasks(string test)
        {
            Collection<DocumentTask> aCollection = new Collection<DocumentTask>();

            var documentTaska = new DocumentTask { TaskId = "patha", DocumentPath = "~/Images/w.JPG" };
            var documentTaskb = new DocumentTask { TaskId = "pathb", DocumentPath = "~/Images/w.JPG" };
            var documentTaskc = new DocumentTask { TaskId = "pathc", DocumentPath = "~/Images/w.JPG" };
            var documentTaskd = new DocumentTask { TaskId = "pathd", DocumentPath = "~/Images/w.JPG" };
            aCollection.Add(documentTaska);
            aCollection.Add(documentTaskb);
            aCollection.Add(documentTaskc);
            aCollection.Add(documentTaskd);
            return aCollection;
        }
    }

    public class DocumentStatus { }

    public class DocumentTask
    {
        public string TaskId { get; set; }
        public string DocumentPath { get; set; }
        public string UserDataToProveItWorking { get; set; }
    }

    public class CustomViewModel
    {
        public DocumentStatus Status { get; set; }
        public IList<DocumentTask> TaskList { get; set; }
    }

    TaskService _taskService = new TaskService();

    public ActionResult Overview()
    {
        return View();
    }

    public ActionResult Details(string test)
    {
        var model = _taskService.GetDocumentTasks(test);

        return PartialView("_Details", new CustomViewModel { TaskList = model.ToList() });
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Details(CustomViewModel model)
    {
        return View("Overview");
    }

查看Overview.cshtml:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Overview</title>
</head>
<body>
    <div> 
        @Html.ActionLink("GetPartialView", "Details", new { test = "aTestValue"})
    </div>
</body>
</html>

部分查看_Detials.cshtml

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Overview</title>
</head>
<body>
    <div> 
        @Html.ActionLink("GetPartialView", "Details", new { test = "aTestValue"})
    </div>
</body>
</html>