2013-07-12 2 views
8

Sto avendo una vista parziale Dipartimento contenente informazioni di reparto. Ho vista pagina del dipendente. nella vista Dipendente sto usando la vista parziale del dipartimento per mostrare il dipartimento dei dipendenti. Il mio modello di impiegato è come sottocome mantenere i dati del modello di vista parziale durante il postback in asp.net mvc

Ho pulsante di invio sulla vista pagina dipendente. Quando invio la vista dipendente, ottengo l'oggetto Dipartimento come null. Potrebbe per favore suggerirmi come posso ottenere il modello del Dipartimento bambino durante il postback. codice Coltroller

[HttpGet] 
     public ActionResult Employee2() 
     { 
      Employee e = new Employee(); 
      e.EmployeeName = "Prashant"; 
      e.Department = new Department() { DepartmentName = "Phy" }; 

      return View(e); 
     } 

     [HttpPost] 
     public ActionResult Employee2(Employee e) 
     { 

      return View(e); 
     } 

Visualizzazioni

Dipartimento

@model MvcApplication2.Models.Department 

<script src="~/Scripts/jquery-1.7.1.min.js"></script> 
<script src="~/Scripts/jquery.validate.min.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 

    <fieldset> 
     <legend>Department</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.DepartmentName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.DepartmentName) 
      @Html.ValidationMessageFor(model => model.DepartmentName) 
     </div> 


    </fieldset> 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

dipendenti

@model MvcApplication2.Models.Employee 
@{ 
    ViewBag.Title = "Employee"; 
} 
<h2> 
    Employee</h2> 
@using (Html.BeginForm("Index","Home")) 
{ 

    <fieldset> 
     <legend>Employee</legend> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.EmployeeName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.EmployeeName) 
      @Html.ValidationMessageFor(model => model.EmployeeName) 
     </div> 
     @Html.Partial("Department", Model.Department) 
     <p> 
      <input type="submit" value="EmployeeSave" /> 
     </p> 
    </fieldset> 
} 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 
+8

può l'elettore down Si prega di spiegare perché questa domanda è stato giù votato. Ottima domanda. Non solo votare e scappare. Fai sapere al poster perché. –

risposta

4

prova a cercare prima. Questa domanda è stata posta molte volte prima.

Ecco un modo per farlo:

mvc partial view post

Sommario: avvolgere ogni parziale nel più tag forma ognuno con il proprio pulsante di invio.

Ma questo sembra più simile a quello che stai dopo:

Post a form with multiple partial views

Utilizzare editortemplates per questo, invece di parziali.

Il problema che si verifica è che quando la casella di testo DepartmentName non viene denominata correttamente affinché il controller possa leggerla. Il tuo POST sarebbe EmployeeName=Prashant&DepartmentName=Phy quindi Department è null, quindi l'errore.

4

Prova questo,

Inoltre è cambiato il nome dell'entità reparto modellismo. E posizione di visualizzazione del reparto in Shared/EditorTemplates.

VISTA:

@using (Html.BeginForm("Employee", "Content")) 
{ 
@Html.EditorFor(model => model.dptEmployeeName.DepartmentName) 
    <fieldset> 
     <legend>Employee</legend> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.EmployeeName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.EmployeeName) 
      @Html.ValidationMessageFor(model => model.EmployeeName) 
     </div> 
     @Html.EditorFor(model => model.dptEmployeeName.DepartmentName) //This is partial view 

     <p> 
      <input type="submit" value="EmployeeSave" /> 
     </p> 
    </fieldset> 
} 

CONTROLLER:

[HttpPost] 
     public ActionResult Employee(Employee e,FormCollection frm) 
     { 
      var asd = frm["dptEmployeeName.DepartmentName"]; 

      return View(e); 
     }