代码之家  ›  专栏  ›  技术社区  ›  NorbertFD

无法按视图创建模型,Partialview使用ajax更新

  •  0
  • NorbertFD  · 技术社区  · 8 年前

    我的问题:

    enter image description here

    当我更改这个下拉列表的值时,将使用ajax更新标准列表。 enter image description here

    但是,当我提交表单时,控制器接收到InspeccioViewModel,而没有列表中的标准。

      // 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标准Speccio Assignatsview模型:

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

    如果我在没有ajax的情况下使用它,修复标准就可以了。。。

    我已经在谷歌上搜索过了,但我找不到适合我的解决方案。

    你能帮我吗?

    非常感谢!

    1 回复  |  直到 8 年前
        1
  •  0
  •   NorbertFD    8 年前

    我终于找到了解决办法!

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

    它必须接收模型:)