0

Как повторно использовать частичный вид или шаблоны одного приложения MVC в другое приложение MVC. Я создал два приложения MVC в одном решении. Приложения - DemoVirtualPathProvider и SimpleMVCApp. Я добавил один дополнительный частичный вид в SimpleMVCapp под названием _samplepartialview.cshtml. Теперь я хочу использовать этот частичный вид внутри приложения DemoVirtualPathProvider. Так может кто-нибудь помочь мне решить это. Заранее спасибо.Как повторно использовать частичный вид приложения One MVC в другое приложение MVC

Это то, что я пробовал. Я добавил EmbeddedVirtualFile класс

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Reflection; 
    using System.Text; 
    using System.Web; 
    using System.Web.Hosting; 

    namespace DemoVirtualPathProvider.Models 
    { 
     public class EmbeddedVirtualFile : VirtualFile 
     { 
      private readonly string virtualPath; 
      private readonly Assembly assembly; 

      public EmbeddedVirtualFile(string virtualPath) : base(virtualPath) 
      { 
       this.assembly = this.GetType().Assembly; 
       this.virtualPath = VirtualPathUtility.ToAppRelative(virtualPath); 
      } 


      public override System.IO.Stream Open() 
      { 

       var resourceName = this.GetType().Namespace + "." + virtualPath.Replace("~/", "").Replace("/", "."); 
       return assembly.GetManifestResourceStream(resourceName); 
      } 
     } 
    } 

Это код класса EmbeddedVirtualPathProvider

 using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Reflection; 
    using System.Web; 
    using System.Web.Hosting; 

    namespace DemoVirtualPathProvider.Models 
    { 
      public class EmbeddedVirtualPathProvider : VirtualPathProvider 
      { 
       private readonly Assembly assembly =  typeof(EmbeddedVirtualPathProvider).Assembly; 

       private readonly string[] resourceNames; 

       public EmbeddedVirtualPathProvider() 
       { 
         this.resourceNames = assembly.GetManifestResourceNames(); 

       } 

       private bool IsEmbeddedResourcePath(string virtualPath) 
       { 
         var checkpath = VirtualPathUtility.ToAppRelative(virtualPath); 
         var resourceName = this.GetType().Namespace + "." + checkpath.Replace("~/", "").Replace("/","."); 
         return this.resourceNames.Contains(resourceName); 
       } 

       public bool IsFileExists(string virtualPath) 
       { 
         return IsEmbeddedResourcePath(virtualPath) || base.FileExists(virtualPath); 
       } 


       public override VirtualFile GetFile(string virtualPath) 
       { 
         if (IsEmbeddedResourcePath(virtualPath)) 
         return new EmbeddedVirtualFile(virtualPath); 
         return base.GetFile(virtualPath); 
       } 


       public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart) 
       { 
         if (IsEmbeddedResourcePath(virtualPath)) 
          return null; 
         return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart); 
       } 
      } 
     } 

Это моя _layout.cshtml страница DemoVirtualPathProvider Применение

 <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
      <meta charset="utf-8" /> 
      <title>@ViewBag.Title - My ASP.NET MVC Application</title> 
      <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
      <meta name="viewport" content="width=device-width" /> 
      @Styles.Render("~/Content/css") 
      @Scripts.Render("~/bundles/modernizr") 
      </head> 
      <body> 
      <header> 
       <div class="content-wrapper"> 
       <div class="float-left"> 
       <p class="site-title">@Html.ActionLink("your logo here", "Index", "Home")</p> 
       </div> 
       <div class="float-right"> 
        <section id="login"> 
        @Html.Partial("_LoginPartial") 
        @Html.Partial("_SimplePartialView") 
        </section> 
        <nav> 
         <ul id="menu"> 
         <li>@Html.ActionLink("Home", "Index", "Home")</li> 
         <li>@Html.ActionLink("About", "About", "Home")</li> 
         <li>@Html.ActionLink("Contact", "Contact", "Home") </li> 
         </ul> 
        </nav> 
        </div> 
     </div> 
    </header> 
    <div id="body"> 
     @RenderSection("featured", required: false) 
     <section class="content-wrapper main-content clear-fix"> 
      @RenderBody() 
     </section> 
    </div> 
    <footer> 
     <div class="content-wrapper"> 
      <div class="float-left"> 
       <p>&copy; @DateTime.Now.Year - My ASP.NET MVC Application</p> 
      </div> 
     </div> 
    </footer> 

    @Scripts.Render("~/bundles/jquery") 
    @RenderSection("scripts", required: false) 
</body> 
</html> 

ответ

0

Единственный надежный способ обмена мнениями между проектами заключается в использовании Razor Generator. Это скомпилирует ваши представления cshtml в коде C#, который вы можете разделить между проектами, как любой другой бит кода C#, через библиотеку классов или тому подобное.

+0

Вы можете предоставить образец кода для этого г-на @ Криса Пратта. – sadanand

+0

Проверьте документацию. Они рассказывают вам все, что вам нужно сделать, чтобы встать и бежать. –