如何让Html.DropDownList对其值进行编码?

时间:2009-09-07 15:50:08

标签: c# .net asp.net-mvc encoding

在我的viewData中,我有一个IList mls。 我想用它来显示下拉列表。像这样:

<%= Html.DropDownList("ml3Code", 
        new SelectList(Model.Mls, "Code", "Description", Model.Ml3.Code ?? ""),
            Model.T9n.TranslateById("Labels.All"),
            new { @class = "searchInput" })%>

这样可以正常工作,直到myObject.Code == VOC <420 g / l。 我原以为HTML帮助器会对其值进行编码,但事实并非如此。 我该如何处理这个问题?我唯一能想到的是首先使用编码值制作对象的重复列表,然后将其提供给选择列表。这真是太麻烦了。

P.S。我希望Phill H.和他的团队能够长期彻底地了解asp.net-mvc 2.0的encoding ...

3 个答案:

答案 0 :(得分:2)

我很困惑。问题“Do ASP.NET MVC helper methods like Html.DropDownList() encode the output HTML?”之前被问过,答案是“是” - 并且引用了MVC框架的源代码来支持这个断言。

答案 1 :(得分:1)

好吧,你可以推出自己的Html助手,但如果你像我一样,你就不会那样做。

对我来说,我在这里看到两个选择:

  1. 在没有帮助器的普通视图中编写select元素。我从来没有觉得帮助者为发生错误时突出显示元素提供了很多保存。

  2. 在页面加载时修补客户端上的选择框,如:

  3. function encodeHtml(str) {     var encodedHtml = escape(str);     encodedHtml = encodedHtml.replace(/// g,“%2F”);     encodedHtml = encodedHtml.replace(/ \?/ g,“%3F”);     encodedHtml = encodedHtml.replace(/ = / g,“%3D”);     encodedHtml = encodedHtml.replace(/&amp; / g,“%26”);     encodedHtml = encodedHtml.replace(/ @ / g,“%40”);     return encodedHtml; }

    window.onload = function()
    {
      var ml3Code = document.getElementById("ml3Code");
    
      for(var i = 0; i < ml3Code.options.length; ++i)
      {
      ml3Code.options[i].value = encodeHtml(ml3Code.options[i].value);
      }
    };
    

    这是一个黑客,我知道。我非常喜欢第一选择。

答案 2 :(得分:0)

这是编码的。但是不要用萤火虫检查 - 它显示了解码的值。

检查浏览器的ViewSource并对事物进行编码。

<强>控制器

    public List<CategoryInfo> GetCategoryList()
    {
        List<CategoryInfo> categories = new List<CategoryInfo>();
        categories.Add(new CategoryInfo { Name = "Food<äü", Key = "VOC<420 g/l", ID = 2, Uid = new Guid("C0FD4706-4D06-4A0F-BC69-1FD0FA743B07") });

    }


    public ActionResult Category(ProductViewModel model )
    {

        IEnumerable<SelectListItem> categoryList  =
                                   from category in GetCategoryList()
                                   select new SelectListItem
                                   {
                                       Text = category.Name,
                                       Value = category.Key
                                   };
        model.CategoryList = categoryList;



      return View(model);
    }

查看

  <%= Html.DropDownList("Category" , Model.CategoryList) %>

<强>模型

public class ProductViewModel
{
    public IEnumerable<SelectListItem> CategoryList { get; set; }
    public List<CategoryInfo> Categories { get; set; }


}

<强> HTML

      <select id="Category" name="Category"><option value="VOC&lt;420 g/l">Food&lt;&#228;&#252;</option>
</select>