【问题标题】:Unable to get SelectList working in ASP.NET MVC无法让 SelectList 在 ASP.NET MVC 中工作
【发布时间】:2020-07-31 08:34:32
【问题描述】:

我正在努力让我的SelectList 工作。我尝试在模型类中添加选项,但我无法让它工作并出现错误

Member Testing.TaxIDType 不能通过实例引用访问;改为使用类型名称来限定它

我不确定如何解决。

我将SelectList 项目添加到我的模型中:

public static List<SelectListItem> TaxIDType = new List<SelectListItem>()
{
    new SelectListItem() { Text = "FEIN", Value = "FEIN" },
    new SelectListItem() { Text = "SSN", Value = "SSN" }
};

我尝试使用以下语句在视图中调用。

@Html.DropDownListFor(Model => Model.TaxIDType, class.TaxIDType)

我收到以下两个错误:

“IEnumerable”不包含“TaxIDType”的定义,并且找不到接受“IEnumerable”类型的第一个参数的可访问扩展方法“TaxIDType”(您是否缺少 using 指令或程序集引用?)


无法通过实例引用访问成员“Testing.TaxIDType”;改为使用类型名称来限定它

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: html asp.net asp.net-mvc forms


    【解决方案1】:

    这是在您的案例中使用 DropDownListFor 助手的分步说明。

    1. 创建一个包含 SelectListItem 实例集合的模型。

      public class MyModel
      {
          public List<SelectListItem> TaxIDType = new List<SelectListItem>()
          {
              new SelectListItem() { Text = "FEIN", Value = "FEIN" },
              new SelectListItem() { Text = "SSN", Value = "SSN" }
          };
      }
      

    注意:如果您愿意,您甚至可以将属性设置为static,但是,您需要更改在视图上引用该属性的方式(稍后会解释)

    1. 创建模型并将其传递给视图。

      public ActionResult Index()
      {
          var viewModel = new MyModel();
          return View(viewModel);
      }
      
    2. 在视图中,声明您的视图使用 MyModel 类。您可以通过将 @model 助手放在视图顶部(.cshtml 文件)来实现。

       @model WebApplication3.Controllers.MyModel 
      

    这里,WebApplication3.Controllers 是模型的命名空间,MyModel 是它的名称。不要使用列出的命名空间和模型,而是将它们更改为您自己的。

    1. 使用 DropDownListFor 帮助器如下

       @Html.DropDownListFor(x => ??, Model.TaxIDType)
      

    在示例中,Model 是一个由框架填充的属性,以让您访问您在控制器内部的View() 方法中传递的类实例。 (在这种情况下为MyModel 实例)。 通过编写 Model.TaxIDType 您正在引用包含要填充下拉列表的项目列表的属性。 请注意,模型中的属性没有标记为static,这就是我们必须通过实例(模型)引用访问它的原因。但是,您确实可以创建属性static。在这种情况下,您需要将视图中的用法更改为以下内容:

         @Html.DropDownListFor(x => ??, MyModel.TaxIDType)
    

    最后要提的一点:看看问号。为了取回选定的值,您需要将其映射到模型。一种方法是扩展模型。

    public class MyModel
    {
        public string SelectedTaxIdType { get; set; }
    
        public List<SelectListItem> TaxIDType = new List<SelectListItem>()
        {
            new SelectListItem() { Text = "FEIN", Value = "FEIN" },
            new SelectListItem() { Text = "SSN", Value = "SSN" }
        };
    }
    

    然后修改视图

    @Html.DropDownListFor(x => x.SelectedTaxIdType, Model.TaxIDType)
    

    【讨论】:

    • 很抱歉忘记在代码中添加第二个错误。您可以检查一下,而且在视图中进行更改后错误仍然存​​在。请,谢谢。
    • 你的型号是什么?在@model 语句中检查它。
    • 谢谢,但我不知道怎么做。我试图将这个声明放在我的观点中,但没有任何结果。即使有断点也不显示任何内容。
    • 感谢您的详细回复。我根据您的建议进行了更改,跳过步骤 2 作为同一模型中的下拉列表。但是,我仍然收到第 4 步的编译器错误:“CS0176:无法使用实例引用访问成员 'Testing.TaxIDType';改为使用类型名称对其进行限定”。
    • Oleksandr,我还有另一个关于这个问题的问题。你能代替回答吗?我会赞成这两个答案。 stackoverflow.com/questions/61326726/…
    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 2012-12-13
    • 2017-10-14
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    相关资源
    最近更新 更多