如果我们需要动态的用AJAX从服务器端获取HTML代码,拼接字符串是一种不好的方式,所以我们将HTML代码写在cshtml文件中,然后通过代码传入model,动态获取cshtml中的HTML代码

当然,我们想要使用通用的方法去获取cshtml,就必须重写RazorViewEngine视图引擎,配置视图搜索位置

在查找一个视图时,Razor视图引擎遵循了MVC框架早期版本建立起来的约定。例如,如果你请求与Home控制器相关的Index视图,Razor会审查这样的视图列表:

● ~/Views/Home/Index.cshtml

● ~/Views/Home/Index.vbhtml

● ~/Views/Shared/Index.cshtml

● ~/Views/Shared/Index.vbhtml

正如你现在知道的,Razor实际上不会在磁盘上查找这些视图文件,因为它们还没有被编译成C#类。Razor查找的是表示这些视图的编译类。.cshtml文件是含有C#语句的模板(我们正在使用的这种),而.vbhtml文件含有Visual Basic语句。

你可以通过生成一个RazorViewEngine子类,来改变Razor搜索的这种视图文件。这个类是Razor的IViewEngine实现。它建立于一组基类之上,这些类定义一组用来确定搜索哪种视图文件的属性。这些属性如表所描述。

Property 属性 Description 描述 Default Value 默认值
ViewLocationFormats MasterLocationFormats PartialViewLocationFormats The locations to look for views, partial views, and layouts 查找视图、分部视图、以及布局的位置 "~/Views/{1}/{0}.cshtml", "~/Views/{1}/{0}.vbhtml", "~/Views/Shared/{0}.cshtml", "~/Views/Shared/{0}.vbhtml"
AreaViewLocationFormats AreaMasterLocationFormats AreaPartialViewLocationFormats The locations to look for views, partial views, and layouts for an area 查找一个区域的视图、分部视图、及布局的位置 "~/Areas/{2}/Views/{1}/{0}.cshtml", "~/Areas/{2}/Views/{1}/{0}.vbhtml", "~/Areas/{2}/Views/Shared/{0}.cshtml", "~/Areas/{2}/Views/Shared/{0}.vbhtml"

这些属性先于Razor的引入,这是每组三个属性具有相同值的原因。每个属性是一个字符串数组,它们是用复合字符串格式化符号来表示的。以下是与占位符对应的参数值:

● {0} represents the name of the view. {0} 表示视图名

● {1} represents the name of the controller. {1} 表示控制器名

● {2} represents the name of the area. {2} 表示区域名 为了修改搜索位置,你要生成一个派生于RazorViewEngine的新类,并修改表所描述的一个或多个属性值。

在Infrastructure文件夹中新建一个CustomRazorViewEngine类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace MvcApplication1.Infrastructure
{
public class CustomRazorViewEngine : RazorViewEngine
{
public CustomRazorViewEngine()
{ ViewLocationFormats = new string[] { "~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
"~/Views/Shared_PartialView/{0}.cshtml"//指定查找某个文件的路径
}; PartialViewLocationFormats = new string[] { "~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
"~/Views/Shared_PartialView/{0}.cshtml"////指定查找某个文件的路径
};
} }
}

我们在Global.asax的Application_Start方法中,用ViewEngines.Engines集合来注册我们的这个派生视图引擎,像这样:

 protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new CustomRazorViewEngine()); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}

获取html字符串的方法以及如何调用

public class HomeController : Controller
{
//
// GET: /Home/ public ActionResult Index()
{
string html = this.ControllerContext.RenderViewToString("_CommonPartial", new UserViewModel() { UserName="haha"});
return View(new UserViewModel() { IsEnable = false, UserCode = "aa" });
} } public static class HelperExtensions
{
public static string RenderViewToString(this ControllerContext context, string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = context.RouteData.GetRequiredString("action"); context.Controller.ViewData.Model = model; using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
var viewContext = new ViewContext(context,
viewResult.View,
context.Controller.ViewData,
context.Controller.TempData,
sw);
try
{
viewResult.View.Render(viewContext, sw);
}
catch (Exception ex)
{
throw;
} return sw.GetStringBuilder().ToString();
}
}
}

ASP.NET MVC 在控制器中获取某个视图动态的HTML代码的更多相关文章

  1. MVC 在控制器中获取某个视图动态的HTML代码

    ASP.NET MVC 在控制器中获取某个视图动态的HTML代码   如果我们需要动态的用AJAX从服务器端获取HTML代码,拼接字符串是一种不好的方式,所以我们将HTML代码写在cshtml文件中, ...

  2. ASP.Net MVC 在控制器中获取View中的form表单值的方法

    在网站开发中,我们常常需要用到表单提交的方式,那么在MVC中是如何获取到表单中的数据呢?下面我们来介绍以下几种方式 首先我们先看看View前台页面 添加一个控制器 我们再看看前台页面的代码 @{ La ...

  3. asp.net mvc 在View中获取Url参数的值

    如果url是 /home/index?id=3 直接Request就ok. 但是如果路由设定为:{controller}/{action}/{id} url是 /home/index/3   这时想在 ...

  4. ASP.NET MVC之控制器传递数据到视图的四种方式

    前奏 1. 在新建项目中的Models文件下,新建Products类: public class Products { public int Id { get; set; } public strin ...

  5. ASP.NET MVC 在控制器中接收视图表单POST过来的数据方法

    方法一:通过Request.Form [HttpPost]        public ActionResult Test()        {            string id=Reques ...

  6. MVC教程二:从控制器中获取URL的值

    一.从控制器中获取URL的值有三种方式: 1.使用Request.QueryString[] 例如: string value = Request.QueryString["BookId&q ...

  7. .NET/ASP.NET MVC Controller 控制器(IController控制器的创建过程)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...

  8. ASP.NET MVC中将控制器分离到类库的实现

    前言 在ASP.NET MVC的开发中,我们创建完项目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在创建项目自动生成的内容上Model我们很容易分离成类库, ...

  9. 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能

    在ASP.NET MVC应用程序中,如果使用Server.Transfer()方法希望将请求转发到其它路径或者Http处理程序进行处理,都会引发“为xxx执行子请求时出错”的HttpException ...

随机推荐

  1. Nancy FormsAuthentication使用

    1.新建UserDatabase类,实现IUserMapper接口 using System; using System.Collections.Generic; using System.Linq; ...

  2. csharp: DBNull and DateTime

    /// <summary> /// /// </summary> /// <param name="dateTime"></param&g ...

  3. 【Java每日一题】20161012

    package Oct2016; public class Ques1012 { public static void main(String[] args) { System.out.println ...

  4. win系统盘下面安装RedHat Linux6.2ES

    安装中的流程和问题 1.安装准备 硬盘分区 下载rhel-server-6.2-i386-dvd.iso 接下来就是一些安装过程 2.安装教程有很多,可以结合参考: http://www.dedecm ...

  5. java servlet手机app访问接口(三)高德地图云存储及检索

    这篇关于高德地图的随笔内容会多一点, 一.业务说明     对应APP业务中的成员有两类,一是服务人员,二是被服务人员,  主要实现功能, 对APP中的服务人员位置进行时时定位, 然后通过被服务人员登 ...

  6. 【算法和数据结构】_11_小算法_itoa、ftoa及字符串倒置

    [1]main.c /**************************************************** * * 把整数按照进制数转换为相应进制的字符串 *(要考虑符号),比如 ...

  7. 2016弱校联盟十一专场10.3---We don't wanna work!(STL--set的使用)

    题目链接 https://acm.bnu.edu.cn/v3/contest_show.php?cid=8504#problem/C 代码如下: #include <iostream> # ...

  8. AspectJ对AOP的实现

    一:你应该明白的知识 1.对于AOP这种编程思想,很多框架都进行了实现.Spring就是其中之一,可以完成面向切面编程.然而,AspectJ也实现了AOP的功能,且实现方式更为简捷,使用更加方便,而且 ...

  9. MYSQL数据库如何赋予远程某个IP访问权限

    1. 授权用户root使用密码jb51从任意主机连接到mysql服务器:代码如下:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'jb ...

  10. Hibernate入门案例配置以及增、删、改、查看

    享受痛苦就是走向成功的第一步. 一.创建一个项目(lib里面是需要的夹包小奶瓶要导包) 二.书写大配置文件 大配置文件必须放置在项目根目录(专业classpath下):界定:就是src 1名称:hib ...