Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC中编辑和发布复杂对象1:n4#_C#_.net_Asp.net Mvc 4 - Fatal编程技术网

C# 在MVC中编辑和发布复杂对象1:n4#

C# 在MVC中编辑和发布复杂对象1:n4#,c#,.net,asp.net-mvc-4,C#,.net,Asp.net Mvc 4,我有下面两门课。我可以通过屏幕输入数据,并按型号和列表获取数据ProdutoPadrao和produtopadraocacteristica 我想显示ProdutoPadrao和produtopadraocacteristica列表中的数据,但是如何检索带有descripa和tipocharacteristicaid的项目来编辑值​​ 在数据库中 在屏幕上显示我知道,做foreach和使用RenderPartial,并创建他们的TextFor,但如何在POST表单中检索它 但是如何在屏幕上进行编

我有下面两门课。我可以通过屏幕输入数据,并按型号和列表获取数据
ProdutoPadrao
produtopadraocacteristica

我想显示
ProdutoPadrao
produtopadraocacteristica
列表中的数据,但是如何检索带有
descripa
tipocharacteristicaid
的项目来编辑值​​ 在数据库中

在屏幕上显示我知道,做foreach和使用RenderPartial,并创建他们的TextFor,但如何在POST表单中检索它

但是如何在屏幕上进行编辑呢

屏幕大致如下所示:

模型 控制站 视图主控
@model FlexGestor.Models.ProdutoPadrao
@使用(Html.BeginForm())
{
@Html.TituloPagina(“Visualizando Produto Padrão”,“派拉阿尤达集团”,“帮助Produto Padrao”)
@Html.HiddenFor(m=>m.ProdutoPadraoID)
@LabelFor(m=>m.descripcao)@Html.ValidationMessageFor(m=>m.descripcao)
@TextBoxFor(m=>m.descripao,新的{@class=“form control”})
@LabelFor(m=>m.Detalhe)@Html.ValidationMessageFor(m=>m.Detalhe)
@text区域(m=>m.Detalhe,新的{@class=“form control”,@rows=“4”})
@LabelFor(model=>model.listaProdutCaracteristica)
    @如果(Model.ListaProdutoCaracteristica!=null) { foreach(Model.ListaProdutoCaracteristica中的var项) { Html.RenderPartial(“_CustomerPhonesEditor”,项目); } }
附加电话

@Html.BotaoTelaDetalhar() }
查看数据报
@model FlexGestor.Models.ProdutoPadraoCaracteristica
@Html.HiddenFor(m=>m.ProdutoPadraoID)
@Html.HiddenFor(m=>m.ProdutoPadraoCaracteristicaID)
@LabelFor(m=>m.TipoCaracteristicaID)@Html.ValidationMessageFor(m=>m.TipoCaracteristicaID)
@Html.DropDownList(“TipoCharacteristicaId”,(SelectList)ViewBag.listaCracteristica,String.Empty,
新的{@class=“表单控制”})
@LabelFor(m=>m.descripcao)@Html.ValidationMessageFor(m=>m.descripcao)
@TextBoxFor(m=>m.descripao,新的{@class=“form control”})
删除

由于您的
foreach
循环未正确命名控件,因此回发时集合
ProdutoPadraoCaracteristica
的值为空。在
视图/Shared/EditorTemplates
文件夹中创建编辑器模板
produtopadraocacteristica.cshtml
,并从
\u CustomerPhoneEditor
部分视图复制代码

然后修改循环以使用编辑器模板,因此

<div class="controls">
  <ul id="PhonesEditor" style="list-style-type: none">
    @if (Model.ListaProdutoCaracteristica != null) {
      foreach (var item in Model.ListaProdutoCaracteristica) {
        Html.RenderPartial("_CustomerPhonesEditor", item);
      }
    }
  </ul>
</div>
这将生成以下元素:

<input type="hidden" name="ListaProdutoCaracteristica[0].ProdutoPadraoID" ...>
<input type="hidden" name="ListaProdutoCaracteristica[1].ProdutoPadraoID" ...>


etc,这将正确发回

您需要发布控制器方法(GET和post)和视图(而不是图像)的代码@StephenMuecke在发布时添加post和GET和view,
ProdutoPadrao
null的
ListaProdutoCaracteristica
属性是否为null?@StephenMuecke抱歉不理解,在post方法的第一行上放置了一个断点,并检查
模型
参数的值-其属性是否为
ListaProdutoCaracteristica
null?(我正在尝试确定数据是否正确发布)嗨,MTSYS。你能发布添加另一个按钮的JS吗?@user1295445,不清楚你在问什么。最好的猜测是你想要或。如果没有,你需要问你自己的问题。
[Authorize]
[HttpPost]
[ControleDeAcesso(TipoAcao.Normal)]
public ActionResult Detalhar(string btnSubmit, ProdutoPadrao model)
{
    if (!ModelState.IsValid)
    {                
        return View(model);
    }

    using (var db = new ERPContext())
    {
        var produtoPadrao = db.ProdutoPadrao.Include("ListaProdutoCaracteristica").Where(w => w.ProdutoPadraoID == model.ProdutoPadraoID).ToList().FirstOrDefault();
        var retorno = FlexGestor.Helpers.EntidadeBaseExt.ValidarRegistro(produtoPadrao, TipoAcao.Gravar);
        if (retorno != "")
        {
            TempData["MsgRetornoError"] = retorno;
            return RedirectToAction("Index", "Home");
        }
        model.ListaProdutoCaracteristica = null;
        if (btnSubmit != "Excluir")                
            UpdateModel(produtoPadrao);

        FlexGestor.Helpers.EntidadeBaseExt.AtribuirValores(produtoPadrao, btnSubmit);
        db.Entry(produtoPadrao).State = EntityState.Modified;
        db.SaveChanges();

        if (btnSubmit == "Excluir")
            return RedirectToAction("Index", controller);

        return RedirectToAction("Detalhar", controller, new { id = model.ProdutoPadraoID });
    }
}
@model FlexGestor.Models.ProdutoPadrao


@using (Html.BeginForm())
{
    <div class="row">                
        @Html.TituloPagina("Visualizando Produto Padrão", "Clique para abrir a ajuda", "#help_produtoPadrao")
        @Html.HiddenFor(m => m.ProdutoPadraoID)
        <div class="col-md-12">
            @Html.LabelFor(m => m.Descricao) @Html.ValidationMessageFor(m => m.Descricao)
            @Html.TextBoxFor(m => m.Descricao, new { @class = "form-control" })
        </div>
        <div class="col-md-12">
            @Html.LabelFor(m => m.Detalhe) @Html.ValidationMessageFor(m => m.Detalhe)
            @Html.TextAreaFor(m => m.Detalhe, new { @class = "form-control", @rows = "4" })
        </div>

    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.ListaProdutoCaracteristica)
        <div class="controls">
            <ul id="PhonesEditor" style="list-style-type: none">
                @if (Model.ListaProdutoCaracteristica != null)
                {
                    foreach (var item in Model.ListaProdutoCaracteristica)
                    {
                        Html.RenderPartial("_CustomerPhonesEditor", item);
                    }
                }
            </ul>
        </div>
        <p><a id="addAnother" class="small-button">AddPhone</a></p>
    </div>

    <div class="row">        
        <div class="col-md-12">
            @Html.BotaoTelaDetalhar()
        </div>
    </div>
}
@model FlexGestor.Models.ProdutoPadraoCaracteristica



    @Html.HiddenFor(m => m.ProdutoPadraoID)
    @Html.HiddenFor(m => m.ProdutoPadraoCaracteristicaID)

    <div class="col-md-3">
        @Html.LabelFor(m => m.TipoCaracteristicaID) @Html.ValidationMessageFor(m => m.TipoCaracteristicaID)
        @Html.DropDownList("TipoCaracteristicaID", (SelectList)ViewBag.ListaCaracteristica, String.Empty,
                      new { @class = "form-control" })
    </div>

    <div class="col-md-9">
        @Html.LabelFor(m => m.Descricao) @Html.ValidationMessageFor(m => m.Descricao)
        @Html.TextBoxFor(m => m.Descricao, new { @class = "form-control" })
    </div>

    <div class="form-group">
        <div class="controls">
            <a onclick="$(this).parent().parent().parent().remove();" class="small-button" style="float: left;">Delete</a>
        </div>
    </div>
<div class="controls">
  <ul id="PhonesEditor" style="list-style-type: none">
    @if (Model.ListaProdutoCaracteristica != null) {
      foreach (var item in Model.ListaProdutoCaracteristica) {
        Html.RenderPartial("_CustomerPhonesEditor", item);
      }
    }
  </ul>
</div>
@Html.EditorFor(m => m.ListaProdutoCaracteristica)
<input type="hidden" name="ListaProdutoCaracteristica[0].ProdutoPadraoID" ...>
<input type="hidden" name="ListaProdutoCaracteristica[1].ProdutoPadraoID" ...>