EditorFor не работает на классах в разных DLL
У меня есть решение с двумя проектами.
Один из них содержит классы слоя доступа к данным (DAL.dll), а другой - проект ASP.NET MVC. Проект ASP.NET MVC зависит от DAL.dll. Я хочу использовать классы DAL.dll в классе модели в проекте ASP.NET MVC.
Предположим, что у меня есть класс в DAL.dll следующим образом:
public class Test{
public string Description{get;set;}
}
И в проекте ASP.NET MVC у меня есть класс модели, который использует Test.cs следующим образом:
public class ModelClass{
Test CrudModel{get;set;}
public string Description{get;set;}
}
И, на мой взгляд (*.cshtml) у меня есть следующий код:
@Html.EditorFor(model => model.CrudModel.Description, "tinymce_jquery_min")
В приведенном выше коде, @Html.EditorFor
не отображает шаблон "tinymce_jquery_min".
Но когда я использую следующий код, @Html.EditorFor
делает шаблон "tinymce_jquery_min":
@Html.EditorFor(model => model.Description, "tinymce_jquery_min")
Почему @Html.EditorFor отображает шаблон только для свойств, которые находятся в классе модели в проекте ASP.NET MVC, а не для свойств в другой DLL?
обновленный
Шаблон "tinymce_jquery_min" выглядит следующим образом:
<script src="@Url.Content("~/Scripts/tinymce/jquery.tinymce.js")" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
setTimeout(loadTinyMCE, 500);
});
function loadTinyMCE() {
$('#@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)').tinymce({
script_url: '@Url.Content("~/Scripts/tinymce/tiny_mce.js")',
theme: "advanced",
height: "300",
width: "400",
verify_html: false,
theme_advanced_buttons1: "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
theme_advanced_statusbar_location: "bottom",
theme_advanced_resizing: false,
convert_urls: false,
template_external_list_url: "lists/template_list.js",
external_link_list_url: "lists/link_list.js",
external_image_list_url: "lists/image_list.js",
media_external_list_url: "lists/media_list.js"
});
}
</script>
@Html.TextArea(string.Empty,
ViewData.TemplateInfo.FormattedModelValue
)
2 ответа
Спасибо ataravati за вашу помощь. Кажется, есть ошибка в моем шаблоне. Я должен измениться
ViewData.TemplateInfo.GetFullHtmlFieldName
в
ViewData.TemplateInfo.GetFullHtmlFieldId
Потому что ASP MVC создает другое значение для свойства id и свойства name в следующем коде:
@Html.EditorFor(model => model.CrudModel.Description, "tinymce_jquery_min")
затем
ViewData.TemplateInfo.GetFullHtmlFieldName
не работает.
Вот как вы делаете свой частичный вид строго типизированным. Определите модель (которая в данном случае имеет тип string) и используйте Html.TextAreaFor
для рендеринга вашей TextArea:
@model string
<script src="@Url.Content("~/Scripts/tinymce/jquery.tinymce.js")" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
setTimeout(loadTinyMCE, 500);
});
function loadTinyMCE() {
$('#@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)').tinymce({
script_url: '@Url.Content("~/Scripts/tinymce/tiny_mce.js")',
theme: "advanced",
height: "300",
width: "400",
verify_html: false,
theme_advanced_buttons1: "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
theme_advanced_statusbar_location: "bottom",
theme_advanced_resizing: false,
convert_urls: false,
template_external_list_url: "lists/template_list.js",
external_link_list_url: "lists/link_list.js",
external_image_list_url: "lists/image_list.js",
media_external_list_url: "lists/media_list.js"
});
}
</script>
@Html.TextAreaFor(model => model)