【问题标题】:Html.BeginForm posted Model is nullHtml.BeginForm 发布模型为空
【发布时间】:2015-03-11 10:01:57
【问题描述】:

您好,我有以下问题: 我试图通过表单将模型发布到其他控制器操作。 但是收到的模型只填充了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" });
    }
}

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; }
}

Index.cshtml

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

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>
}

【问题讨论】:

  • 不是@Html.TextBoxFor(Model =&gt; Model.tool_extention.a),而是@Html.TextBoxFor(m=&gt; m.tool_extention.a)

标签: c# asp.net asp.net-mvc-4 razor html-helper


【解决方案1】:

ToolsExtention 尝试在表单发布方法中将 EditToolOverview 属性从 EditToolModel 更改为 ToolsExtention。

[HttpPost]
public ActionResult EditToolOverview(ToolsExtention myModel)
{
    //_devProv.changeToolExtention(myModel);
    return RedirectToAction("Index", "Tool", new { show = "overview" });
}

【讨论】:

    【解决方案2】:

    您需要在 tool_extention 属性上有一个 getter/setter 才能使 DefaultModelBinder 工作

    public ToolsExtention tool_extention { get; set; }
    

    tool 属性同上(但您的视图中只有 tool_extention 属性的呈现控件)

    【讨论】:

    • 谢谢,非常感谢。它解决了我的问题。认为 tool_extention 中变量的 getter 和 setter 就足够了。
    • 我是根据视图假设的,但是如果您唯一的渲染控件是 ToolsExtention,为什么不直接将您的模型设为 ToolsExtention(并将其发回而不是制作模型 EditToolModel
    • 我有更多的东西要渲染,但我不想只为表单问题发布我的整个代码
    • @StephenMuecke 我一直在寻找这个答案几个小时:“你需要在 tool_extention 属性上有一个 getter/setter 才能让 DefaultModelBinder 工作”。我发现大量关于模型值的帖子是空白的,但这是解决我问题的帖子。非常感谢!
    • 非常感谢!对我帮助很大
    猜你喜欢
    • 2020-02-08
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多