首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将值从ViewBag传递到部分视图

将值从ViewBag传递到部分视图
EN

Stack Overflow用户
提问于 2012-10-19 15:02:54
回答 1查看 10.9K关注 0票数 0

因此,我的控制器的代码如下:

代码语言:javascript
复制
private CommunityModelsContext dbCommunities = new CommunityModelsContext();

// GET: /Home/
public ActionResult Index()
{
     //retrieve the Communities 
     ViewBag.Communities = dbCommunities.Communities.ToList();
     return View();
}

我的视图有这行非常重要的行来启动局部视图

代码语言:javascript
复制
<div id="LeftView" class="PartialView">@{Html.RenderPartial("CommunitiesPartial");}</div>

在部分视图中,我正在尝试创建一个名称(我还在学习,这是一个练习应用程序,看看我是否理解了asp.net教程中的概念),然后它将获取这个实体列表,显示一个字段,从另一个字段获取值(“DropDownList”和"id")

代码语言:javascript
复制
@model BuildingManagement.Models.Community.Community

@Html.BeginForm("Index","CommunityController")
{
    <div>
        @Html.LabelFor(x => x.Name)
        @Html.DropDownList("Community" , new SelectList(Model.Name,"id","Name"))
    </div>
}

现在这抛出了一个NullReference异常,模型为空。索引页面中没有模型,也没有绑定到任何内容,但是,数据是通过ViewBag发送的。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-10-19 15:09:42

您的部分被强类型化为一个模型(BuildingManagement.Models.Community.Community)。因此,您需要首先将此模型传递给主视图:

代码语言:javascript
复制
public ActionResult Index()
{
    //retrieve the Communities 
    ViewBag.Communities = dbCommunities.Communities.ToList();
    BuildingManagement.Models.Community.Community model = ... retrieve your model
    return View(model);
}

然后,由于您决定使用ViewBag而不是视图模型,因此您需要在partial中继续使用在此ViewBag中定义的值:

代码语言:javascript
复制
@Html.DropDownList("Community", new SelectList(ViewBag.Communities, "id", "Name"))

当然,更好的方法是使用视图模型:

代码语言:javascript
复制
public class CommunityViewModel
{
    [DisplayName("Name")]
    public int Id { get; set; }
    public IEnumerable<SelectListItem> Communities { get; set; }
}

然后让您的控制器填充视图模型,并将此视图模型传递给视图:

代码语言:javascript
复制
public ActionResult Index()
{
    //retrieve the Communities 
    var communities = dbCommunities.Communities.ToList().Select(x => new SelectListItem
    {
        Value = x.Id.ToString(), 
        Text = x.Name
    })
    var model = new CommunityViewModel
    {
        Communities = communities
    }
    return View(model);
}

然后将视图和partial强类型化为视图模型:

代码语言:javascript
复制
@model CommunityViewModel
@using (Html.BeginForm("Index","CommunityController"))
{
    <div>
        @Html.LabelFor(x => x.Id)
        @Html.DropDownListFor(x => x.Id, Model.Communities)
    </div>
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12969014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档