2012-03-26 21 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在這個意義上是完全不同的,一旦你通過這些例子,你應該得到更好的理解。

相關問題