为什么我的方法“DropDownListFor”没有重载?

时间:2014-10-13 02:26:07

标签: c# asp.net asp.net-mvc view html.dropdownlistfor

我正在学习MVC并编写自己的简单应用程序。计算器应用程序。基本上,我想让用户输入两个数字然后使用下拉菜单来决定他们将对数字进行哪些操作。不像以前我一直在做的事情。下面的代码(除了我在博客文章中发现的用于下拉的提示),完全是我自己的。

问题

我很惊讶下拉菜单最终会有多么重要。所以我发现这很好post。我将此代码修改为我的解决方案,我收到以下错误:

描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。

Compiler Error Message: CS1501: No overload for method 'DropDownListFor' takes 1 arguments

Source Error:


Line 18:         <p>First Number : @Html.TextBoxFor(x => x.Number1) </p>
Line 19:         <p>Second Number: @Html.TextBoxFor(x => x.Number2)</p>
Line 20:         <p>Select Operand: @Html.DropDownListFor(x=>x.OperationItems)</p>
Line 21:         <input type="submit" value="Enter" />
Line 22:     }

代码

模型

public class CalculatorData
{
    private readonly List<CalculatorOperations> ops = new List<CalculatorOperations>();

    //Does this have to be public or not? 
    public string Number1 { get; set; }
    public string Number2 { get; set; }

    public IEnumerable<SelectListItem> OperationItems
    {
        get { return new SelectList(ops); }
    }
    //Database context connector? 

    public CalculatorData()
    {
        ops.Add(new CalculatorOperations { Name = "Add" });
        ops.Add(new CalculatorOperations { Name = "Subtract" });
        ops.Add(new CalculatorOperations { Name = "Multiply" });
        ops.Add(new CalculatorOperations { Name = "Divide" });
    }

}

  public class CalculatorOperations
  {
        public string Name { get; set; }

  }

控制器

public class CalculatorController : Controller
{
    //
    // GET: /Calculator/
    public ActionResult Index()
    {
        CalculatorData cd = new CalculatorData();

        return View(cd);
    }
}

查看

@model MVCalculatorDemo.Models.CalculatorData

@{
    Layout = null; 
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>RsvpForm</title>
</head>
<h2>Calculator</h2>
<body>
    @using (Html.BeginForm())
    {
        <p>First Number : @Html.TextBoxFor(x => x.Number1) </p>
        <p>Second Number: @Html.TextBoxFor(x => x.Number2)</p>
        <p>Select Operand: @Html.DropDownListFor(x=>x.OperationItems)</p>
        <input type="submit" value="Enter" />
    }
</body>
</html>

尝试

  1. 我认为重载方法是一个很大的线索。因此,我怀疑我的方法OperationItems在我的模型中搞砸了。话虽如此,我不确定它会是什么?
  2. This。除了我认为我的模型不适合这个问题。
  3. 原谅任何愚蠢的错误。我想我很亲近? Webdev此刻正在旋转。

2 个答案:

答案 0 :(得分:1)

嗯,这真的非常简单。该错误告诉您问题:

No overload for method 'DropDownListFor' takes 1 arguments
                                         ^^^^^^^^^^^^^^^^

这是DropDownListFor:

http://msdn.microsoft.com/en-us/library/system.web.mvc.html.selectextensions.dropdownlistfor(v=vs.118).aspx

正如你所看到的,没有一个人拿1个论点。最简单的版本需要3个参数(虽然第一个是隐藏的,因为它被用作扩展方法的一部分,所以你只在实际代码中看到2个参数)。

下拉列表至少需要两件事,一个用于保存所选值的变量,以及一个要选择的项目列表。在您的代码中,您没有用于保存所选项目的变量,因此您如何知道用户选择了哪个项目?

你会注意到你所链接的问题,答案是有两个论点。

答案 1 :(得分:1)

你真的看过你的代码吗? Razor必须突出显示DropDownListFor作为编译错误的声明,因为至少这个扩展方法接受两个参数,表达式(从模型中关联的属性)和将使用的IEnumerable<>对象填充下拉项目。这应该做......

@Html.DropDownListFor(x=>x.OperationItems, Model.OperationItems)

有关详细信息,请查看DropDownListFor

的文档