避免在控制器中使用viewdata可枚举对象 - reg

时间:2011-03-23 06:04:07

标签: asp.net asp.net-mvc-2

今天我得2分 I.我有一个控制器,我有一个公共静态方法来获取复选框的详细信息,如

public static List<country> GetCountryLists()
    {
        List<country> countries = new List<country>();
        country _country = new country() { countryname = "Select a country", value = "0" };
        country _country1 = new country() { countryname = "India", value = "India" };
        country _country2 = new country() { countryname = "USA", value = "USA" };
        countries.Add(_country);
        countries.Add(_country1);
        countries.Add(_country2);

        return countries;
    }

目前,我正在通过

使用此功能
      ViewData["country"] = GetCountryLists();

我可以在视图中使用与此相同的功能,这样我就不需要使用viewdata对象了,

<%: Html.DropDownList("country", new SelectList(UserController.GetCountryLists(), "value", "countryname", "0"))%>

请建议我最好的做法。

II。我还有另一个查询,当我使用相同的id&amp; radiobuttons的名称,客户端的验证工作正常。 如果我对一组复选框使用相同的条件,我得不到在客户端验证期间突出显示复选框,并且仅在服务器验证期间,我收到错误消息,但控件[复选框]没有指示错误的红色边框。 我使用自己的html助手按照http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs

生成复选框列表

请告诉我是否有任何可能解决此问题的方法。由于我是asp.net mvc2的新手,我不确定是否使用这些......请相应地建议我。

1 个答案:

答案 0 :(得分:1)

  

我可以在视图中使用与此相同的功能,这样我就不需要使用viewdata对象了

不,由于各种原因,这不是好的做法和违反MVC模式。观点不应该提取信息。它们应该只使用在视图模型中传递的信息。控制器负责调用各种方法来获取数据,然后构建包含视图所需的所有必要信息的视图模型,然后将此视图模型传递给视图。所以这是建议的方式:

<%= Html.DropDownListFor(
    x => x.Country, 
    new SelectList(Model.Countries, "value", "countryname")
) %>

或使用丑陋/弱类型/避免使用/需要魔术字符串ViewData

<%= Html.DropDownList(
    "Country", 
    new SelectList((IEnumerable)ViewData["Countries"], "value", "countryname")
) %>

并且控件负责填充视图模型属性或丑陋的ViewData。

就您的第二个问题而言,您需要显示您的代码才能看到它的错误。根据您的描述,我可以说,您不能在DOM中拥有两个具有相同ID的元素,或者您获得的标记无效。