ASP.NET Core MVC复用共享.cshtml文件出错的解决方案咨询
表单复用的正确实现方案
1. 关于RenderPage()报错的说明
RenderPage是旧版ASP.NET MVC的方法,ASP.NET Core已移除该API,直接弃用即可。
2. 修复RenderPartialAsync()显示为文本的问题
你遇到的文本显示问题是调用方式错误,正确写法有两种:
- 方式一:用代码块包裹异步调用(
RenderPartialAsync直接写入响应流)
@{ await Html.RenderPartialAsync("/Shared/Forms/_ContactForm.cshtml"); }
- 方式二:用
PartialAsync返回HTML内容(更简洁)
@await Html.PartialAsync("/Shared/Forms/_ContactForm.cshtml")
两种写法都能正确渲染表单,不会出现文本输出的问题。
3. 保留布局结构的注意事项
绝对不要在_ContactForm.cshtml里添加<!DOCTYPE html>、<html>这类根标签,局部视图只需编写表单本身的HTML片段,页面整体结构由_Layout.cshtml统一提供,局部视图会自动嵌入到布局的渲染区域中。
4. 多页面复用的优化技巧
如果要在Contact.cshtml和所有个人项目子页面底部复用表单,可按场景选择方案:
- 统一布局场景:在共用的
_Layout.cshtml底部添加上述渲染代码,或者定义一个可选节:- 在
_Layout.cshtml中添加节定义:
@RenderSection("FooterForm", required: false)- 在需要的页面中实现该节:
@section FooterForm { @await Html.PartialAsync("/Shared/Forms/_ContactForm.cshtml") } - 在
- 多布局场景:用视图组件封装,复用性更强:
- 创建
ContactFormViewComponent类:
public class ContactFormViewComponent : ViewComponent { public async Task<IViewComponentResult> InvokeAsync() { // 需要传递模型的话,可在此处理逻辑 return View("_ContactForm"); } }- 在目标页面调用组件:
@await Component.InvokeAsync("ContactForm") - 创建
内容的提问来源于stack exchange,提问作者Windgate
相关产品推荐
相关产品推荐

