2012-07-02 2 views
0

У меня есть список, который я заполняю, используя foreach. (Long объяснения того, почему я должен это сделать.) Мне нужно бежать строку, потому что имя_файл и 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 сразу после установки значения Или там предпочтительный C# способ избежать, что будет хорошо работать с экранированием в JavaScript, который я использую для экранирования в этих символах

ответ

3

Вот что AttributeEncode помощник делает:.

<option value="@Html.AttributeEncode(custString)">@cust.DisplayName</option> 

Но эй, что ты делаешь? foreach loop для создания выпадающего списка ????

Попробуйте вспомогательный помощник и остановите кровотечение внутри вашего вида, прежде чем его слишком поздно. Этот помощник делает то, что предлагает его название. И заботится о кодировании и побегах и что угодно.

Так просто определить вид модели:

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); 
} 

и внутри вида, используйте DropDownListДля помощника, когда вам нужно сгенерировать выпадающий список:

@Html.DropDownListFor(x => x.CustomerId, Model.Customers) 
+0

Это отлично работает. Спасибо! – user449480

Смежные вопросы