我有一个使用foreach填充的列表框。 (很好地解释了为什么我需要这样做。) 我需要转义字符串,因为fname和lname可以包含特殊字符,例如'或'。
foreach (var cust in item.Customers)
{
var custString = string.Format("{0}%#%{1}%#%{2}", cust.CustID, cust.LName, cust.FName);
<option value="@custString">@cust.DisplayName</option>
}
有没有办法在设置值后立即对custString进行javascript转义?或者有一个首选的C#转义方式,可以很好地使用javascript的unescape,我正在使用它来浏览这些字符。
答案 0 :(得分:3)
这就是AttributeEncode
助手的作用:
<option value="@Html.AttributeEncode(custString)">@cust.DisplayName</option>
但是,嘿,你在做什么? foreach循环生成下拉列表????
尝试使用Html.DropDownListFor
帮助程序,并在太迟之前停止查看。这个助手就像它的名字所暗示的那样。并负责编码和转义等等。
所以只需定义一个视图模型:
public class MyViewModel
{
public string CustomerId { get; set; }
public IEnumerable<SelectListItem> Customers { get; set; }
}
然后继续执行控制器操作并将此视图模型传递给视图:
public ActionResult Index()
{
IEnumerable<Customer> customers = ... fetch the domain model from your DAL or something
// map to a view model:
var viewModel = new MyViewModel
{
Customers = customers.Select(x => new SelectListItem
{
Value = x.CustID,
Text = string.Format("{0}%#%{1}%#%{2}", x.CustID, x.LName, x.FName)
})
};
// pass the view model to the view:
return View(viewModel);
}
并在视图内部,当您需要生成下拉列表时使用DropDownListFor帮助程序:
@Html.DropDownListFor(x => x.CustomerId, Model.Customers)