ASP.NET MVC查看用户控件 - 如何设置ID?

时间:2008-11-05 15:34:10

标签: asp.net asp.net-mvc

我的页面上需要一个下拉列表,允许用户选择其状态。由于这可能是一个将在别处使用的控件,我认为创建一个可以重用的MVC View用户控件是个好主意。

我认为控件看起来像这样:

<select name="" id="">
   <option value="AL">Alabama</option>
   <option value="AK">Alaska</option>
</select>

我视图中的代码类似于:

<%= Html.RenderPartial("StateDropdownControl") %>

我的问题是,在控件上设置名称和ID的最佳方法是什么?如果需要,我想确保在一个页面上可以有多个此控件实例。此外,我希望能够发送默认情况下应该选择的状态。

我会以某种方式使用ViewData吗?

3 个答案:

答案 0 :(得分:9)

Corey正在寻找合适的解决方案。我认为为您的视图声明特定的模型对象会使视图变得非常简单,并且副作用使得它们容易被测试。

因此,您可能不想仅将ID作为对象传递,而是希望创建自己的Model对象以进行传递。

看起来像这样:

public class StateDropDownPresentationModel
{
    public string DropDownID { get; set; }
    public string SelectedState { get; set; }
}

显然,请继续添加此模型所需的任何内容,以使您的观看正确。

然后,您可以这样称呼它:

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", new StateDropDownPresentationModel { DropDownID = "MyID", SelectedState = "IL" } %>

然后确保你对ID为null / blank(可能会抛出错误)和SelectedState为null / blank之类的内容进行检查。

答案 1 :(得分:3)

您可以将对象数据与用户控件一起传递给RenderPartial方法进行渲染,这样您就可以轻松执行以下操作:

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", "MyID") %>

and in the UserControl do the following:

<select name="<%=ViewData.Model%>" id="<%=ViewData.Model%>">

....

Just to be sure, a better way to handle it is to make a simple DTO (data transfer object) to hold that information so you can pass more information to your user control, that you will inevitably need.

Example:


class ComboData 
{
   string ID {get;set;}
   string CssClass {get;set;}
   //Other stuff here
}

<%
var comboData = new ComboData {ID = "myID", CssClass = "comboStyle" }

%>

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", comboData) %>
<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", "MyID") %>

请确保将用户控件的代码设置为此示例的ComboData类型的通用代码。

答案 2 :(得分:1)

看一下Html.DropDownList帮助器方法。它有许多重载,允许您传递列表数据并设置所选项目。最简单的版本只设置选择的名称。

<%= Html.DropDownList("SelectStates"); %>

如果ViewData [“SelectStates”]中有一个MultiSelectList类型的值,那么列表将自动填充。