0

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エスケープを行う方法はありますか?または、これらの文字をエスケープ解除するために使用しているjavascriptのエスケープ解除でうまく機能する好ましいC#エスケープ方法はありますか?

4

1 に答える 1

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)
于 2012-07-02T18:18:27.297 に答える