我已经开始接触MVC ASP.NET,潜力非常令人兴奋。我有点陷入困境,想知道是否有人可以提供建议。
我已经弄清楚如何将类型对象捆绑到 View 数据中,然后在 View 中访问它们。
在 View 中,我选取 View 数据对象并将其分配给相应的类型。
@using MyPro.Models;
@{
var viewDataMyObj = ViewData["MyObj"] as MyObj;
}
然后我将其进一步向下拾取并成功访问我的 {get,set} 并填充 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”)。我对此确实缺乏一些知识,如果您有任何建议,我将不胜感激。
最佳答案
Html.DropDownListFor
应该仅适用于您的模型。将其应用于 viewDataMyObj.myVar
将不起作用。
从显示的代码来看,没有证据表明您的 View 具有模型(不要将 using
与 model
混淆)
假设您的 View 应该与 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" })
您可以看到 DropDownListFor
适用于 x.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" })
关于c# - 访问 View 中的viewdata对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32779069/