我的视图文件夹Users
中有一个名为UserViewControl.cshtml
的文件。
我在实际视图中的代码(Users.cshtml
)是:
@Html.RenderPartial("RegisterViewControl")
错误:The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
我不想完全像这样输入路径,因为整个视图文件夹将来可能会移动:
@Html.RenderPartial("~/Views/Users/RegisterViewControl.cshtml")
RegisterViewControl.cshtml中的代码:
@model SampleMVC.Web.ViewModels.RegisterModel
@using (Html.BeginForm("Register", "Auth", FormMethod.Post, new { Id = "ERForm" }))
{
@Html.TextBoxFor(model => model.Name)
@Html.TextBoxFor(model => model.Email)
@Html.PasswordFor(model => model.Password)
}
这是一个由ajax提交的表单,但我希望从viewmodel进行所有验证。
答案 0 :(得分:23)
应该是这样的:
@{Html.RenderPartial("RegisterViewControl");}
那是因为RenderPartial
扩展方法没有返回任何内容。它直接写入输出。在aspx中,你可以这样使用它:
<% Html.RenderPartial("RegisterViewControl"); %>
而不是:
<%= Html.RenderPartial("RegisterViewControl") %>
所以同样的规则适用于剃刀。
答案 1 :(得分:7)
您也可以使用
@Html.Partial("RegisterViewControl")
答案 2 :(得分:0)
我也遇到过这个问题,直接从Scott Guthrie的博客文章中得到了这个问题:
使用Razor视图中的
@Html.RenderPartial()
无效。而不是仅仅使用
Html.RenderPartial()
@Html.Partial("partialname")
返回一个字符串并且可以正常工作。
或者,如果你真的想使用void return方法 可以使用以下语法:
@{Html.RenderPartial("partialName")}
但
@Html.Partial()
是最干净的。
此链接为:http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx