2015-09-25 45 views
0

正在进入MVC ASP.NET,令人兴奋的潜力。我有点卡住了,想知道是否有人可以请指教。访问视图中的viewdata对象

所以我已经摸索出如何捆绑类型的对象到可视数据,然后在视图访问它们。

所以在视图中,我拿起我的viewdata对象并将其分配给相应的类型。

@using MyPro.Models; 
    @{ 
     var viewDataMyObj = ViewData["MyObj"] as MyObj; 
    } 

然后我把它捡起来进一步下跌,并成功地访问我的{获取,设置}和填充DropDownListFor ...

@Html.DropDownListFor(x => viewDataMyObj.myVar, new  SelectList((IEnumerable<SelectListItem>)viewDataMyObj.mySel.OrderBy(c => c.Value), "Value", "Text", "Select All"), new { @Class = "form-control" }) 

所以mySel是在我的模型和作品。这是字符串myVar,我不能将它分配为id字段,它实际上需要“viewDataMyObj.myVar”并将其作为ID,而不是myVar的内容“hello”。我肯定缺乏这方面的知识,并会很乐意提供任何建议。

回答

0

Html.DropDownListFor应该只用你的模型工作。所以将其应用于viewDataMyObj.myVar将无法​​使用。 从你所示的代码没有任何证据能证明你的观点有一个模型(不要混淆usingmodel) 假设你应该以与MyObj模型的工作和MyObj具有myVar财产咋办就从下拉填充沿着这应该工作:

@model MyPro.Models.MyObj 
@{ 
    var viewDataMyObj = ViewData["MyObj"] as MyObj; 
} 

@Html.DropDownListFor(x => x.myVar, new SelectList((IEnumerable<SelectListItem>)viewDataMyObj.mySel.OrderBy(c => c.Value), "Value", "Text", "Select All"), new { @Class = "form-control" }) 

你可以看到,DropDownListForx.myVar这是模型的属性而不是viewDataMyObj.myVar

此外,如果你的模型是MyObj中,它也包含日Ë数据来填充你的下拉菜单,你不需要使用ViewData的所有广告:

@Html.DropDownListFor(
    x => x.myVar, 
    Model.mySel.OrderBy(c => c.Value) 
     .Select(c => new SelectListItem{Value = c.Value, Text = c.Text}),  
    "Select All", 
    new { @Class = "form-control" }) 
+0

我使用的是相同的模型不止一次地以同样的观点,以及其他几种模式。这就是我想要做的。也许我错过了使用MVC的观点并恢复到Web表单。我一直这样做。 –

+0

您不能在同一视图中使用多个模型。从你的评论我假设你不明白MVC是如何工作的,我建议阅读一般的MVC概念,特别是关于ASP.NET MVC。还有一件重要的事情:所有可以通过WEB形式完成的事情都可以通过MVC完成。 MVC是一种模式,可以让你组织你的代码,所以它可能是更容易维护 –

+0

我在同样的观点一直在做这{ ...的foreach(在Namespace.Models.Modelname1.Method(“”)VAR P) } foreach(Namespace.Models.Modelname2.Method(“”)中的var p){ }在同一个视图内使用不同的模型。 –

0

创建ID

为我工作的时候尽量myVar.Value ...