c# - 访问 View 中的viewdata对象

标签 c# .net asp.net-mvc

我已经开始接触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 具有模型(不要将 usingmodel 混淆) 假设您的 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/

相关文章:

asp.net-mvc - 通过其路径获取 Sitecore MVC 中的项目

asp.net-mvc - 如何将视觉设计师整合到开发过程中?

c# - LINQ。根据键连接的另一个字典中的相应值更新一个字典

c# - 在基类和派生类中实现接口(interface)

c# - 在 ListView 中更改颜色线

c# - 通用转换功能似乎不适用于 Guids

c# - 我可以让 Linq-To-Sql 将实际值嵌入到查询中而不是将它们作为参数传递吗?

.net - 如何自动更新野田时间数据库,多久更新一次?

asp.net-mvc - ASP.net MVC - 强类型对象来表示我传递给 View 的 Json 对象

c# - 使用列名称的字符串列表查询 SQL 表