为啥我的方法“DropDownListFor”没有重载?
Posted
技术标签:
【中文标题】为啥我的方法“DropDownListFor”没有重载?【英文标题】:Why am I getting a no overload for method "DropDownListFor'?为什么我的方法“DropDownListFor”没有重载? 【发布时间】:2014-10-13 02:26:06 【问题描述】:我正在学习 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>
尝试
-
我认为重载方法是大线索。因此,我怀疑我的方法 OperationItems 在我的模型中搞砸了。话虽如此,我不确定它会是什么?
This。除了我认为我的模型不适合这个问题。
请原谅任何愚蠢的错误。我想我很接近? Webdev 现在让我头晕目眩。
【问题讨论】:
检查this 为模型添加属性public string Operator get; set;
并使用@Html.DropDownListFor(x=>x.Operator, Model.OperationItems)
@StephenMuecke 正是这个,然后我重新阅读了 DropDownList() 文档。所以我现在有一个 id 供我选择。有一个新问题。我看到四个名为“MVCalculatorDemo.Models.CalculatorOperations”的对象,而不是 Add、Substract 等。这是因为我在模型中编写 SelectList 的方式吗?我将它重写为 SelectList(ops, "Name"),但同样的错误。我会继续阅读 MSDN 文档。
没关系,我想通了。该模型需要一个 ID 和一个操作名称,以便可以显示 OperationItem。下拉列表需要做很多工作。 :)
什么是CalculatorOperations
?如果它似乎只有一个属性Text
,你为什么需要它。您的代码可以减少到一两行。
【参考方案1】:
你真的看过你的代码吗? Razor 必须将 DropDownListFor
的声明突出显示为编译错误,因为至少此扩展方法接受两个参数,表达式(与您的模型关联的属性)和将用于填充下拉列表的 IEnumerable<>
对象项目。这应该可以...
@Html.DropDownListFor(x=>x.OperationItems, Model.OperationItems)
有关更多信息,请查看DropDownListFor
的文档
【讨论】:
是的,我一直在查看我的代码。我是新手,经过数小时的阅读和编码,我的大脑快要爆炸了。这对我帮助很大,即使我立即遇到了另一个问题。这帮助我解决了整个问题。现在进入下一部分,即使用我的计算结果制作自定义视图。 :)【参考方案2】:嗯,这真的很简单。错误告诉你问题所在:
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
如您所见,这些都没有一个参数。最简单的版本需要 3 个参数(虽然第一个是隐藏的,因为它被用作扩展方法的一部分,所以您在实际代码中只能看到 2 个参数)。
一个下拉列表至少需要两个东西,一个保存所选值的变量,以及一个要选择的项目列表。在您的代码中,您没有保存所选项目的变量,那么您如何知道用户选择了哪个项目?
您会在链接到的问题中注意到,答案是有两个参数。
【讨论】:
埃里克,谢谢。我以为我检查了这个,但对 SelectListItem 感到困惑。这就是为什么我只使用一个论点。以上是关于为啥我的方法“DropDownListFor”没有重载?的主要内容,如果未能解决你的问题,请参考以下文章
Razor Html.DropDownListFor 自动设置选中值
如何使用对象 MVC 5 C# 的 Javascript 列表填充剃刀 DropDownListFor