Html Id问题

时间:2011-02-05 20:20:08

标签: c# asp.net-mvc automapper

我有类似的东西

public class Reminders()
{
   public List<SelectListItem> Reminder { get; set; }
   public string SelectedReminder { get; set; }
}

现在我想创建一个包含上述内容的Reminder类列表。

List<Reminders> reminders = new List<Reminders>();
// add SelectListItems somehow through auto mapper( not sure how to do)
// add reminders into my viewModel

然后在我看来,我需要循环遍历它们以生成下拉列表。所以我的想法是,如果我想让用户能够设置5个提醒,那么我只需要确保我的收藏有5个提醒。

如果我希望他们只拥有1,我会确保该系列有一个提醒。如果我想要100,那么我将其更改为100.因此,通过这样做,我将来证明该区域可以非常容易地扩展或缩小。

现在在我尝试制作这个并尝试弄清楚如何使用automapper之前我想知道如何让每个下拉列表都有自己的ID?就像现在我可以看到他们都将拥有相同的ID(“SelectedReminder”)。

当然这很糟糕,因为每个html页面只能有一个id。那么我怎样才能让它们有不同的ID?

1 个答案:

答案 0 :(得分:2)

如果您使用的是编辑器模板,则不必担心这一点,因为框架将正确处理所有命名约定。您也不需要执行任何循环。因此,假设您有一个返回IEnumerable<Reminders>的控制器操作,并且您想生成一个下拉列表:

public ActionResult Index()
{
    var reminders = new[]
    {
        new Reminders 
        {
            Reminder = new List<SelectListItem> 
            { 
                new SelectListItem { Value = "1", Text = "reminder 1" },
                new SelectListItem { Value = "2", Text = "reminder 2" },
            },
        },
        new Reminders
        {
            Reminder = new List<SelectListItem> 
            { 
                new SelectListItem { Value = "1", Text = "reminder 1" },
                new SelectListItem { Value = "2", Text = "reminder 2" },
                new SelectListItem { Value = "3", Text = "reminder 3" },
            },
        }
    };
    return View(reminders);
}

然后在您看来,您只需:

@model IEnumerable<AppName.Models.Reminders>
@using (Html.BeginForm())
{
    @Html.EditorForModel()
    <input type="submit" value="OK" />
}

和相应的编辑器模板(~/Views/Home/EditorTemplates/Reminders.cshtml):

@model AppName.Models.Reminders
@Html.DropDownListFor(
    x => x.SelectedReminder, 
    new SelectList(Model.Reminder, "Value", "Text")
)

因为您在视图模型中发送了2个元素,所以会生成2个下拉列表,每个元素都有正确的名称,这样当您回发时,您将获得相应的选定值:

<select name="[0].SelectedReminder">
    <option value="1">reminder 1</option>
    <option value="2">reminder 2</option>
</select>

<select name="[1].SelectedReminder">
    <option value="1">reminder 1</option>
    <option value="2">reminder 2</option>
    <option value="3">reminder 3</option>
</select>