Question

I have a solution with two projects.

One of them contains data access layer classes (DAL.dll), and the other one is an ASP.NET MVC project. The ASP.NET MVC project depends on DAL.dll. I want to use the DAL.dll classes in a model class in the ASP.NET MVC project.

Suppose that I have a class in DAL.dll as follows:

public class Test{

  public string Description{get;set;}

}

And, in the ASP.NET MVC project I have a model class that uses Test.cs as follows:

public class ModelClass{

  Test CrudModel{get;set;}

  public string Description{get;set;} 

}

And, in my view (*.cshtml) I have following code:

@Html.EditorFor(model => model.CrudModel.Description, "tinymce_jquery_min")

In the above code, @Html.EditorFor does not render "tinymce_jquery_min" template.

But, when I use the following code, @Html.EditorFor does render "tinymce_jquery_min" template:

 @Html.EditorFor(model => model.Description, "tinymce_jquery_min")

Why @Html.EditorFor only renders template for properties those are in model class in the ASP.NET MVC project and not for properties in a different dll?

Updated

"tinymce_jquery_min" template is as follow :

<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  
       )
Était-ce utile?

La solution 2

Thanks ataravati for your help. It seems there is a bug in my template. I must change

   ViewData.TemplateInfo.GetFullHtmlFieldName

to

   ViewData.TemplateInfo.GetFullHtmlFieldId

Because ASP MVC creates different value for id property and name property in following code:

@Html.EditorFor(model => model.CrudModel.Description, "tinymce_jquery_min")

then

  ViewData.TemplateInfo.GetFullHtmlFieldName

does not work.

Autres conseils

This is how you make your partial view strongly-typed. Define the model (which is of type string in this case), and use Html.TextAreaFor to render your 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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top