Почему моя модальная форма отправляет нулевую модель обратно в контроллер

У меня есть частичное представление, которое я загружаю в Modal... в индексном представлении 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. Объект модели имеет значение null

Object reference not set to an instance of an object.

кто-нибудь видит, что мне здесь не хватает?


person Bastyon    schedule 14.11.2014    source источник
comment
Когда вы отлаживаете, видите ли вы какие-либо значения, передаваемые контроллеру?   -  person luke2012    schedule 14.11.2014
comment
Я попытался создать аналогичный код с вашим, он отлично работает   -  person Panda Zhang    schedule 14.11.2014


Ответы (2)


Вы должны передать модель в заголовке из представления и из контроллера, а также в частичном представлении ниже.

Пожалуйста, внимательно изучите текст, выделенный жирным шрифтом, и текст между ** **

**@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**);
   }
person Aravindan    schedule 14.11.2014
comment
В этом была проблема. Измените его на DatabeModel, и он отлично сработает. Большое спасибо! - person Bastyon; 14.11.2014

Измените модель в представлении, частичном представлении и в действии. Вместо того, чтобы передавать модель объекта, создайте модель представления и передайте ее в представлении, а также в частичном представлении. рассмотреть следующее

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

Насколько мне известно, база данных является ключевым словом, из-за чего она становится нулевой.

person SenaReddy    schedule 14.11.2014