【问题标题】:Viewdata / Viewbag is empty in editorstemplate MVC编辑器模板 MVC 中的 Viewdata / Viewbag 为空
【发布时间】:2017-01-06 12:29:01
【问题描述】:

带有简单控制器的 Mvc 应用程序,我在其中返回带有模型的视图。 进入你创建视图。 由于大量的下拉列表,我有几个 viewbags(13)。

在视图中,我使用编辑器模板来显示模型中的复杂对象。

问题是编辑器模板中有几个viewbags是空的。

如果我让调试器在控制器中停止,我的 viewbag 将全部正确填充。

如果我让调试器在视图中停止,我可以看到其中一些是空的。

wath 会导致这个问题吗?

控制器:

    public ActionResult SetNewInputForm(InitializeNewInputViewModel model)
    {

       var Input = new Input(model.AantalPrimairen,model.AantalSecundairen);
        ViewBags();
        return View(Input);
    }

       private void ViewBags()
    {
        ViewBag.Blikvorm = Enum.GetNames(typeof(Common.BlikVorm)).ToList();
        ViewBag.Kwaliteit = Database.Kwaliteit.ToList();
        ViewBag.BlikFabrikanten = Database.BlikFabrikant.ToList();
        ViewBag.Walserijen = Database.Walserij.ToList();
        ViewBag.BlikMontage = new SelectList(Database.KernMontage.ToList(),  "Id", "KernMontageNaam");
        ViewBag.SchakelWijze = Enum.GetNames(typeof(Common.SchakelWijze)).ToList();        
        ViewBag.AantalGaten = Enum.GetNames(typeof(Common.AantalGaten)).ToList();
        ViewBag.DiameterGaten = Database.DiameterGat.ToList();
        ViewBag.BlikFormaat = Database.BlikFormaat.ToList();
        ViewBag.KernMontage = Database.KernMontage.ToList();
        ViewBag.KokerFabrikanten = Database.KokerFabrikant.ToList();
    }

我的部分观点

@model DomainClasses.Input


@using (Html.BeginForm("Create", "Input", FormMethod.Post))
{
<div class="containter">
    <div class="row">
        <div class="col-lg-4 ">
            <div class="form-group">
                <strong> @Html.DevExpress().LabelFor(t => t.SchakelwijzePrimair).GetHtml()</strong>
                @Html.DevExpress().ComboBoxFor(t => t.SchakelwijzePrimair,
    settings =>
    {
        settings.Name = "SchakelwijzePrimair";

    }).BindList(ViewBag.Schakelwijze).GetHtml()

            </div>
            @Html.EditorFor(m => m.Primairen, Model.Primairen);
        </div>
        <div class="col-lg-8">

            @Html.EditorFor(m => m.Secundairen, Model.Secundairen);
        </div>

    </div>
</div>
<div class="containter">
    <div style="padding:1em;
         margin:10px 5px;
        border-style:inset;
        background-color: aquamarine;
         overflow:auto">
        @Html.EditorFor(m => m.BlikAfmeting, Model.BlikAfmeting)
    </div>
</div>

我的编辑器模板的一部分:

@model DomainClasses.BlikAfmeting


<h4 class="modal-title"> Blik Afmetingen</h4>
<div class="col-lg-2">
<div class="form-group">

        @Html.DevExpress().Label(settings =>
{
   settings.Name = "ChooseBlikAfmetingComboLabel";
   settings.Text = "Blikformaten";
}).GetHtml()
        @Html.DevExpress().ComboBox(
  settings =>
  {
    settings.Name = "ChooseBlikAfmetingCombo";
    settings.Properties.DropDownStyle = DropDownStyle.DropDownList;
    settings.Properties.CallbackPageSize = 15;
    settings.Properties.IncrementalFilteringMode =  IncrementalFilteringMode.StartsWith;
    settings.Properties.TextFormatString = "{0} {1}";
    settings.Properties.ValueField = "Id";
    settings.Properties.NullText = "Kies BlikFormaat";
    settings.Properties.ValueType = typeof(string);
    //settings.Properties.ClientSideEvents.ValueChanged = "function(s, e) { GetBlikAfmetingTabel(s,e); }";
    settings.Properties.Columns.Add("BlikVorm", "Blik Vorm", 90);
    settings.Properties.Columns.Add("HoofdAfmeting", "Hoofd Afmeting", 90);

}
 ).BindList(ViewBag.BlikFormaat).GetHtml()

Viewbag.Blikformaat 一直是空的 Viewbag.BlikVorm 在 3 个编辑器模板中的 2 个为空。

【问题讨论】:

  • 粘贴您的控制器和 html 代码以找出问题所在
  • 额外说明如果我将相同的组合框放在视图上而不是在编辑器模板中它可以工作
  • 请注意,model-view-controller 标签是针对有关模式的问题。 ASP.NET-MVC 实现有一个特定的标签。
  • 仍然没有人能解释为什么我的 viewbag 没有正确加载到我的编辑器模板中。但在视图本身中正确加载。在我看来,我有一个解决存储库调用的工作,但我认为这不是一个好方法

标签: asp.net-mvc viewbag editortemplates


【解决方案1】:

将你所有的viewbags放在ActionResult方法中,如下所示。

public ActionResult SetNewInputForm(InitializeNewInputViewModel model)
    {
       var Input = new Input(model.AantalPrimairen,model.AantalSecundairen);
        ViewBag.Blikvorm = Enum.GetNames(typeof(Common.BlikVorm)).ToList();
        ViewBag.Kwaliteit = Database.Kwaliteit.ToList();
        ViewBag.BlikFabrikanten = Database.BlikFabrikant.ToList();
        ViewBag.Walserijen = Database.Walserij.ToList();
        ViewBag.BlikMontage = new SelectList(Database.KernMontage.ToList(),  "Id", "KernMontageNaam");
        ViewBag.SchakelWijze = Enum.GetNames(typeof(Common.SchakelWijze)).ToList();        
        ViewBag.AantalGaten = Enum.GetNames(typeof(Common.AantalGaten)).ToList();
        ViewBag.DiameterGaten = Database.DiameterGat.ToList();
        ViewBag.BlikFormaat = Database.BlikFormaat.ToList();
        ViewBag.KernMontage = Database.KernMontage.ToList();
        ViewBag.KokerFabrikanten = Database.KokerFabrikant.ToList();
        return View(Input);
    }

【讨论】:

  • 不,我的问题没有解决。我已经解决了这个问题,现在我在我看来调用了一些存储库。但我想知道为什么编辑器模板中有些视图包是空的,而有些则不是。如果我只在我的视图中调用视图包,一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多