2012-03-26 25 views
1

我做了一个简单的网络用户控制通过阅读Scottgu articles如何在MVC中创建一个Web用户控件?

但是;我的用户控制返回给我的错误:

ERROR

CountryDropDown.ascx:


<%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %> 
<%=ViewData["countries"] = new string[] { "France", "Germany", "US", "UK" })%> 
<%var q = ViewData["countries"]; %> 
<%= Html.DropDownList("",ViewData["countries"] as SelectList)%> 

我的观点:<%= Html.EditorFor(C => c.Country, “CountryDropDown”)% >

MODEL:

public class Customer 
{ 
    [Required(ErrorMessage="NameRequired")] 
    [StringLength(50,ErrorMessage="Must be less than 50")] 
    public string Name { get; set; } 
    [Range(1,20,ErrorMessage="Invalid Age")] 
    public int Age { get; set; } 
    [Required(ErrorMessage="Email Required")] 
    [RegularExpression(@"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}")] 
    public string Email { get; set; } 
    [UIHint("CountryDropDown")] 
    public string Country { get; set; } 
} 

如何使在mvc中使用dropdownlist的ASCX?

+0

那里有左括号吗? 'ViewData [“countries”] = ...'**)**?你可能也不想'<%=' ... '%>'而是'<%' ... '%>'(因为你正在分配不输出)。 – 2012-03-26 13:19:37

回答

2

使用<%=告诉ASP打印以下语句。在这种情况下你不想这样做。

<%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %> 
<% 
    ViewData["countries"] = new string[] { "France", "Germany", "US", "UK" }; 
    var q = ViewData["countries"]; 
%> 
<%= Html.DropDownList("",ViewData["countries"] as SelectList)%> 

试试看。

另外,你为什么分配q而不使用它?

+0

NEW ERROR:传入字典的模型项目类型为'MvcSample2.Models.Customer',但此字典需要类型为'System.String'的模型项目。 – programmerist 2012-03-26 13:28:48

+1

因此,在您的控制器中,您将客户传递给视图,而不是您在视图中指出的字符串。 – KingCronus 2012-03-26 13:30:09

0

变化

<%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>

<%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Customer>" %>

假设客户是在您的命名空间的根。

一般性评论,我假设你正在学习MVC,并且你想使用最新版本。您提到的文章是针对MVC2的。我建议你通过MVC工作在这里3个例子:

http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/getting-started-with-mvc3-part1-cs

剃刀语法应该让您的生活轻松了许多。你也指的是控制(你以前的帖子)。控件存在于Web表单中,当你想开发组件时,它们非常棒。

MVC在这个意义上是完全不同的,一旦你通过这些例子,你应该得到更好的理解。

相关问题