2015-09-25 88 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 ...