Редактор MVC для динамической вставки

#javascript #asp.net-mvc-3 #razor #editorformodel

#javascript #asp.net-mvc-3 #razor #editorformodel

Вопрос:

Я хочу создать javascript, который может динамически вставлять новую модель «EditorFor», но у меня возникли две проблемы.

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("rn", "\n");
  

Правка 2:
Я обнаружил, что следующий код удалит все поля ввода внутри модели редактирования: (

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

Ответ №1:

Попробуйте вот так:

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

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

Таким образом, вам не нужна никакая замена. Он также позаботится о правильном кодировании.