RenderPartial控件位于同一视图文件夹中

时间:2011-01-21 20:39:30

标签: asp.net-mvc asp.net-mvc-3

我的视图文件夹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进行所有验证。

3 个答案:

答案 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