【问题标题】:How to change id value when using Html.DropDownListFor helper in asp.net mvc 2.0?在 asp.net mvc 2.0 中使用 Html.DropDownListFor 助手时如何更改 id 值?
【发布时间】:2011-02-20 00:05:52
【问题描述】:

我有一个像这样的部分视图

 <%= Html.DropDownListFor(m => m.SelectedProductName, Model.ProductList, "Select a Product") %>

现在您可以创建新产品并编辑现有产品。编辑和创建都使用相同的表单。创建是在加载时的主页上。编辑会在 jQuery UI 模型对话框中弹出并呈现一个新的局部视图。

就页面而言,我有 2 个具有相同“id”的下拉框,这很糟糕,因为它们应该是唯一的。那么怎么改id呢?因此,当编辑加载时,它的 id 可能是“editSelectedProductName”?

我尝试在视图模型中这样做

public string SelectedProductName{ get; set; }

ViewModelConstructor()
{
  SelectedProductName = "EditSelectedProductName";
}

但它似乎并不在意,一直使用“SelectedProductName”作为产品名称

【问题讨论】:

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


【解决方案1】:

我目前找不到文档,但是 DropDownListFor 有一个重载,它将接受对象类型的属性集合(HtmlAttributes 是参数名称。)

它看起来像这样:

Html.DropDownListFor(model=>model.SomeProperty, new {@id="UniqueID1234"});

您可以使用 Intellisense 查找包含 HtmlAttributes 的重载。

【讨论】:

  • 我知道它具有 htmlAttributes 属性,但在您的示例中,您对其进行了硬编码。我无法对其进行硬编码,因为我对这两种情况都使用了相同的局部视图。我能看到的唯一方法是我必须在视图数据模型中创建一个特殊属性来保存 id。我希望我不必那样做。
  • 要提的另一点是,即使您尝试覆盖它,该列表的“名称”属性仍将是“SelectedProductName”@name =“NotIdName”,这有点糟糕,但我不这么认为应该影响事情(我至少希望不会)。
  • Dave,我无法覆盖 name 属性,你知道方法吗?
  • 没关系,我只是找到了一种方法。代替“名称”,使用“名称”。出人意料地有效。
【解决方案2】:

您可以使用硬编码的 jQuery:

$('select#[id of your select box]').attr('id', '[id that you want]');

【讨论】:

  • 你不应该更新 id 客户端,而是服务器端
猜你喜欢
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多