Html.BeginForm发布Model为null

Max*_*Ast 3 c# asp.net html-helper razor asp.net-mvc-4

您好我有以下问题:我试图通过表单将模型发布到其他控制器操作.但是收到的模型只填充了"null"元素. 在此输入图像描述

ToolController.cs

public class ToolController : Controller
{    
    public ActionResult Index()
    {
        var Model = new EditToolModel{ /* Some data */ };
        return View(Model);
    }

    [HttpPost]
    public ActionResult EditToolOverview(EditToolModel myModel)
    {
        return RedirectToAction("Index", "Tool", new { show = "overview" });
    }
}
Run Code Online (Sandbox Code Playgroud)

EditToolModel.cs

public class EditToolModel
{
    public Tools tool;
    public IEnumerable<Tools> tools { get; set; }

    public ToolsExtention tool_extention;
    public string latest_version { get; set; }
    public string latest_version_type { get; set; }
    public string latest_devStep { get; set; }

    public IEnumerable<ToolVersionsView> versions { get; set; }
    public IEnumerable<DevelopmentStep> developmentSteps { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Index.cshtml

@model EditToolModel
@{
    ViewBag.Title = "Index";
    Layout = "~/Layout/_Layout.cshtml";
}
@Html.Partial("ToolOverview", this.Model)
Run Code Online (Sandbox Code Playgroud)

ToolOverview.cshtml

@model EditToolModel
@using (Html.BeginForm("EditToolOverview", "Tool", FormMethod.Post))
{
    <div class="contend">
        @Html.TextBoxFor(Model => Model.tool_extention.a)
        @Html.TextBoxFor(Model => Model.tool_extention.b)
        <input type="submit" name="tool_submit" value="Submit"/>
    </div>
}
Run Code Online (Sandbox Code Playgroud)

小智 6

您需要在tool_extention物业上设置一个getter/setter DefaultModelBinder才能工作

public ToolsExtention tool_extention { get; set; }
Run Code Online (Sandbox Code Playgroud)

同样tool属性(但您tool_extention的视图中属性的唯一渲染控件)

  • 我假设基于视图,但如果你的唯一渲染控件为`ToolsExtention`,为什么不只是让你的模型`ToolsExtention`(然后发回它而不是制作模型`EditToolModel`? (2认同)