【问题标题】:Why is my Modal form posting a null model back to the controller为什么我的模态表单将空模型发布回控制器
【发布时间】:2014-11-14 01:51:33
【问题描述】:

我有一个局部视图,我在模态中加载..在索引视图中,模型 div 与 HTML.Partial 看起来像这样。

<div class="modal fade" id="modalEditDBInfo" role="application" aria-labelledby="modalEditDBInfoLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modalEditDBInfoContent" style="background-color:white; border-radius:10px; box-shadow:10px;">
            @Html.Partial("_EditDatabaseInfo")
        </div>
    </div>
</div>

部分视图代码为

@model Hybridinator.Domain.Entities.Database
<br />
<br />

<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
    <h4 class="modal-title" id="editModelTitle">Edit Database Info</h4>
</div>
<div class="modal-body">
    @using (Html.BeginForm("EditDatabaseInfo", "Database", FormMethod.Post, new { @class = "modal-body" }))
    {   
            <div class="form-group">
                <div id="databaselabel" >@Html.LabelFor(m => m.database, "Database")</div>
                <div id="databaseedit" >@Html.EditorFor(m => m.database)</div>
            </div>
            <div class="form-group">
                <div id="databaseserverlabel" >@Html.LabelFor(m => m.database_server, "Database Server")</div>
                <div id="databaseserveredit" >@Html.EditorFor(m => m.database_server)</div>
            </div>

    <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
        <button class="btn btn-inverse btn-primary" type="submit">Save</button>
    </div>
    }       
</div>

如果成功触发此控制器

 [HttpPost]
       public ActionResult EditDatabaseInfo(Database database)
       {
           string s = database.database;
           //do other stuff
           return RedirectToAction("Index");
       }

一切正常,直到我尝试访问控制器帖子中的模型,该模型应该传递给 ActionResult 方法。模型对象为空

Object reference not set to an instance of an object.

有人看到我在这里缺少什么吗?

【问题讨论】:

  • 调试时是否可以看到传递给控制器​​的任何值?
  • 我尝试用你的代码创建一些类似的代码,它工作正常

标签: c# jquery asp.net asp.net-mvc twitter-bootstrap


【解决方案1】:

您必须从视图、控制器和部分视图中传递 Header 中的模型 在下方留言

请仔细查看粗体文本和** **之间的文本

**@model Hybridinator.Domain.Entities.Database**

<div class="modal fade" id="modalEditDBInfo" role="application" aria-labelledby="modalEditDBInfoLabel" aria-hidden="true">
<div class="modal-dialog">
    <div class="modalEditDBInfoContent" style="background-color:white; border-radius:10px; box-shadow:10px;">
        @Html.Partial("_EditDatabaseInfo", **Model** )
    </div>
</div>




[HttpPost]
   public ActionResult EditDatabaseInfo(Database database)
   {
       string s = database.database;
       //do other stuff
       // **you have to get the model value in here and pass it to index action**
       return RedirectToAction(**"Index", modelValue**);
   }



 public ActionResult Index(**ModelClass classValue**)
   {
      //pass the model value into index view.
       return View(**"Index", classValue**);
   }

【讨论】:

  • 这就是问题所在。将其更改为 DatabeModel 并完美运行。非常感谢!
【解决方案2】:

在视图、局部视图和实际操作中更改模型。与其传递实体模型,不如创建视图模型并将其传递给视图和局部视图。考虑以下

@model **DatabaseModel**

<div class="modal fade" id="modalEditDBInfo" role="application" aria-labelledby="modalEditDBInfoLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modalEditDBInfoContent" style="background-color: white; border-radius: 10px; box-shadow: 10px;">
            @Html.Partial("_EditDatabaseInfo", **Model**)
        </div>
    </div>
</div>

@model DatabaseModel

<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
    <h4 class="modal-title" id="editModelTitle">Edit Database Info</h4>
</div>
<div class="modal-body">
    @using (Html.BeginForm( new { @class = "modal-body" }))
    {   
            <div class="form-group">
                <div id="databaselabel" >@Html.LabelFor(m => m.DatabaseName, "Database")</div>
                <div id="databaseedit" >@Html.EditorFor(m => m.DatabaseName)</div>
            </div>
            <div class="form-group">
                <div id="databaseserverlabel" >@Html.LabelFor(m => m.DatabaseServer, "Database Server")</div>
                <div id="databaseserveredit" >@Html.EditorFor(m => m.DatabaseServer)</div>
            </div>

    <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
        <button class="btn btn-inverse btn-primary" type="submit">Save</button>
    </div>
    }       
</div>
public class DatabaseModel
{
    public string DatabaseName { get; set; }
    public string DatabaseServer { get; set; }
}

据我所知,数据库是一个关键词,因为它正在变为空

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多