#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>
Таким образом, вам не нужна никакая замена. Он также позаботится о правильном кодировании.