2017-07-12 52 views
0

首先感謝我的英語。無法創建使用ajax更新的View和Partialview模型

我的問題:

我有一個名爲Inspeccio表和稱爲Criteris相關的表。關係是ManyToMany,所以我有表CriterisInspeccio。

我爲這些表具有相同名稱的模型。

當我想創建一個Inspeccio時,會爲不同類型的Inspeccio提供Dropdownlist。

enter image description here

當我改變這個下拉列表Criteris的列表使用AJAX更新的價值。 enter image description here

但是,當我提交表格時,控制器收到InspeccioViewModel而沒有列表的Criteris。

的代碼:

InspecciosController:

// GET: Inspeccios/Create 
    public ActionResult Create() 
    { 
     ViewBag.IdTipusInspeccio = new SelectList(db.TipusInspeccio, "IdTipusInspeccio", "Tipus"); 
     InspeccioViewModel inspeccioViewModel = new InspeccioViewModel(); 
     return View(inspeccioViewModel); 
    } 

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(InspeccioViewModel inspeccioViewModel) 
    { 
     if (ModelState.IsValid) 
     { 
      Inspeccio inspeccio = InspeccioHelper.ToInspeccio(inspeccioViewModel); 
      db.Inspeccio.Add(inspeccio); 
      db.SaveChanges(); 

      return RedirectToAction("Index"); 
     } 

     return View(inspeccioViewModel); 
    } 

    public ActionResult CriterisSegonsTipusInspeccio(int idTipusInspeccio) 
    { 
     ICollection<CriterisInspeccioAssignatsViewModel> criteris = CriterisSegonsTipusInspeccioFalse(idTipusInspeccio); 
     return PartialView("CriterisInspeccioAssignatsViewModel", criteris); 
    } 

創建視圖:

@model Inspeccions.ViewModels.InspeccioViewModel 

    @{ 
     ViewBag.Title = "Create"; 
     Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 


    @using (Html.BeginForm()) 
    { 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h4>Inspeccio</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Clau, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Clau, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Clau, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.DataCaducitat, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.DataCaducitat, new { htmlAttributes = new { @class = "form-control date-picker" } }) 
       @Html.ValidationMessageFor(model => model.DataCaducitat, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Data, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Data, new { htmlAttributes = new { @class = "form-control date-picker" } }) 
       @Html.ValidationMessageFor(model => model.Data, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

<div class="form-group"> 
    @Html.LabelFor(model => model.Hora, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.EditorFor(model => model.Hora, new { htmlAttributes = new { @class = "form-control" } }) 
     @Html.ValidationMessageFor(model => model.Hora, "", new { @class = "text-danger" }) 
    </div> 
</div> 


     <div class="form-group"> 
      @Html.LabelFor(model => model.Expedient, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Expedient, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Expedient, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.IdTipusInspeccio, "Tipus", htmlAttributes: new {@class = "control-label col-md-2"}) 
      <div class="col-md-10"> 
       @Html.DropDownList("IdTipusInspeccio", null, new {htmlAttributes = new {@class = "form-control"}}) 
       @Html.ValidationMessageFor(model => model.IdTipusInspeccio, "", new {@class = "text-danger"}) 
      </div> 
     </div> 

     <div class="form-group" id="criteris"></div> 

     <div> 
      <br /> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default"/> 
      </div> 
     </div> 



    </div> 
} 



<div> 
    @Html.ActionLink("Tornar al llistat d'inspeccions", "Index") 
</div> 

<script type="text/javascript"> 

    $(document).ready(function() { 
     $("#IdTipusInspeccio").change(function() { 
      var categoryId = $("#IdTipusInspeccio").val(); 
      $("#criteris").load('@(Url.Action("CriterisSegonsTipusInspeccio", "Inspeccios", null, Request.Url.Scheme))?idTipusInspeccio=' + categoryId); 
     }); 
    }); 
</script> 

PartialView CriterisInspeccioAssignatsViewModel:

@model ICollection<Inspeccions.ViewModels.CriterisInspeccioAssignatsViewModel> 
@using Inspeccions.Helpers 

@foreach (var criteri in Model) 
{ 

    <div class="form-horizontal"> 
      <dl class="dl-horizontal"> 
       <dt> 
        @Html.DisplayNameFor(criter => criteri.Titol) 
       </dt> 

       <dd> 
        @Html.DisplayFor(criter => criteri.Titol) 
       </dd> 

       <dt> 
        @Html.DisplayNameFor(criter => criteri.Descripcio) 
       </dt> 

       <dd> 
        @Html.DisplayFor(criter => criteri.Descripcio) 
       </dd> 
      </dl> 
      @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
      <div class="form-group"> 
       @Html.HiddenFor(criter => criteri.IdCriteri, htmlAttributes: new { @class = "control-label col-md-2" }) 
       <div class="col-md-10"> 
        @Html.HiddenFor(criter => criteri.IdCriteri, new { htmlAttributes = new { @class = "form-control" } }) 
        @Html.ValidationMessageFor(criter => criteri.IdCriteri, "", new { @class = "text-danger" }) 
       </div> 
      </div> 

      @if (@Html.Action() == "Create" || @Html.Action() == "Edit" || @Html.Action() == "CriterisSegonsTipusInspeccio") 
      { 
       <div class="form-group"> 
        @Html.LabelFor(criter => criteri.Assignada, htmlAttributes: new { @class = "control-label col-md-2" }) 
        <div class="col-md-10"> 
         <div class="checkbox"> 
          @Html.EditorFor(criter => criteri.Assignada) 
          @Html.ValidationMessageFor(criter => criteri.Assignada, "", new { @class = "text-danger" }) 
         </div> 
        </div> 
       </div> 
      } 

      @if (@Html.Action() == "Details") 
      { 
       <dl class="dl-horizontal"> 
        <dt> 
         @Html.DisplayNameFor(criter => criteri.Assignada) 
        </dt> 

        <dd> 
         @Html.DisplayFor(criter => criteri.Assignada) 
        </dd> 
       </dl> 
      } 
     </div> 
     <hr /> 
} 

如果我使用它,而阿賈克斯,具有Criteris固定它的工作原理...

我搜索了它在谷歌,我不能給我找一個解決方案。

你能幫助我嗎?

很多謝謝!

回答

0

我終於找到了解決方案!

的問題來自

public ActionResult CriterisSegonsTipusInspeccio(InspeccioViewModel inspeccioViewModel) 
{ 
    ICollection<CriterisInspeccioAssignatsViewModel> criteris = CriterisSegonsTipusInspeccioFalse(inspeccioViewModel.IdTipusInspeccio); 
    inspeccioViewModel.CriterisInspeccioViewModel = criteris; 
    return PartialView("CriterisInspeccioAssignatsViewModel", inspeccioViewModel); 
} 

它具有接收模式:)