ViewBag属性集但无法访问

时间:2017-05-01 14:00:08

标签: c# asp.net asp.net-mvc entity-framework

我只是想把一个SelectList放到ViewBag中,但我不能立即访问它。

这是我的代码:

// GET: Content/CreateSerie
public ActionResult CreateSerie()
{
    ViewBag.originalLang = new SelectList(db.Lang, "originalLang", "originalLang");
    return View();
}

如果我使用调试器在ViewBag.originalLang赋值后右步并使用表达式赋值器,我得到

Not found

但是,如果我深入了解ViewBag,我可以看到

Expression evaluation

这真的很奇怪,我不知道为什么我无法正常访问它。当然,我也无法从视图中访问它。

编辑:这是我的观点,正如erdiyılmaz所要求的那样:

@model e08projh17.Models.Content

@{
    ViewBag.Title = "Créer une série";
    @Styles.Render("~/Content/css")
    @Styles.Render("~/Content/themes/base/css")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/jqueryui")
}

<h2>CreateSerie</h2>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal">
        <h4>Content</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })

        <!-- Lots of stuff ... -->


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


        <!-- Lots of stuff ... -->

        <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("Back to List", "Index")</div>

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

3 个答案:

答案 0 :(得分:2)

试试这个:

@Html.DropDownList("originalLang", null, htmlAttributes: new { @class = "form-control" } })

在您的控制器中,您不会将模型返回到视图中。return View(/* empty here */);

所以我不知道您使用DropDownListFor的原因。而是使用DropDownList

答案 1 :(得分:1)

这是因为ViewBag是动态类型,这意味着它在运行时被解析。

如果您单步执行调试器,则表示您正在查看预编译的代码,并且DLR尚未解析ViewBag对象,因此您无法解析该属性。

当您“深入”时,您在ViewBag中看到的是有关如何收集数据以进行解决的实施细节。

答案 2 :(得分:1)

尝试下拉列表

@Html.DropDownListFor(model => model.originalLang, (IEnumerable<SelectListItem>)ViewBag.originalLang, new { htmlAttributes = new { @class = "form-control" } })