1

新しい「EditorFor」モデルを動的に挿入できるJavaScriptを作成したいのですが、2つの問題があります。

1:文字列をHTMLエンコードし続けていますが、停止する方法がわかりません。

2:モデルにインスタンスを含める代わりに、どのモデルを使用するかをどのように伝えることができますか

私は以下を試しましたが、うまくいきません:(

MvcHtmlString emodel = Html.EditorFor(model => new Cosplay.Models.Projects.CreatePartModel(), "CreatePartModel", "Parts[NAMEREPLACE]");
MvcHtmlString emodel = Html.EditorFor(model => Cosplay.Models.Projects.CreatePartModel, "CreatePartModel", "Parts[NAMEREPLACE]");

これが私の完全なJavaScriptです。

@model Cosplay.Models.Projects.CreatePartsModel

@{
    ViewBag.Title = "AddParts";
}
<script type="text/javascript">
    @{
        MvcHtmlString emodel = Html.EditorFor(model => Cosplay.Models.Projects.CreatePartModel, "CreatePartModel", "Parts[NAMEREPLACE]");
        string editor = emodel.ToString().Trim().Replace("\"", "\\\"");;
    }
    function getPartHtml(name) {
        var html = '@editor';
        return html.replace("NAMEREPLACE", name);
    }
    $(document).ready(function () {
        var lastCount = 5;
        $("#addPartInput").click(function () {
            lastCount++;
            $('#edit_part_list').append(getPartHtml(lastCount));
        });
    });
</script>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <div id="edit_part_list">
        @Html.EditorFor(model => Model.Parts)
    </div>

    <a id="addPartInput">Add another part</a><br />
    <input type="submit" value="Save" />
}

編集:私は次の問題2を修正しましたが、問題1はまだ残っています。

Html.Editor("Parts[X]", "CreatePartModel").ToString().Replace("\"", "\\\"").Replace("\r\n", "\\n");

編集2:次のコードで編集モデル内のすべての入力フィールドが削除されることがわかりました:(

Html.Editor("Parts[X]", "CreatePartModel")
4

1 に答える 1

4

このようにしてみてください:

<div id="foo"></div>

<script type="text/javascript">
var html = '@Html.Raw(HttpUtility.JavaScriptStringEncode(Html.EditorFor(x => x.Name).ToHtmlString()))';
$('#foo').html(html);
</script>

このように、交換する必要はありません。また、適切なエンコードも処理します。

于 2011-04-17T16:45:55.413 に答える