ASP.NET MVC3 RenderPage& Html.BeginForm

时间:2011-02-28 15:49:28

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

我和RenderPage一起出现Html.BeginForm的问题(不知道我做错了什么)。

假设您有一个简单的_Test.cshtml,例如:

@{
    <span>Test Text</span>
}

然后假设您有一个这样的简单页面(使用_Test.cshtml):

 @{
    Layout = null;
    var b = new int[] { 0, 1, 2, 3, 4 };
}

@{
    <html>
        <body>
            @* @RenderPage("~/Views/Shared/_Test.cshtml") *@
            <div>
                @foreach (int i in b)
                {
                    <div>
                    @using (Html.BeginForm("Action", "Controller", new { id = i }, FormMethod.Post, new { id = "frm_"+ i.ToString() })) 
                    {
                        <span>Label&nbsp;&nbsp;</span>
                        <input type="submit" id="@i.ToString()" value="@i.ToString()" />
                    }
                    </div>
                }
            </div>
        </body> 
    </html>   
}

如果您注释掉RenderPage帮助程序调用,则会使用相应的提交按钮正确获取一系列表单。如果取消注释RenderPage助手,则不会生成任何标记。不知道发生了什么事,有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

为什么使用RenderPage? Html.Partial似乎更原生:

@{
    Layout = null;
    var b = new int[] { 0, 1, 2, 3, 4 };
}
<html>
    <body>
        @Html.Partial("~/Views/Shared/_Test.cshtml")
        <div>
            @foreach (int i in b)
            {
                <div>
                @using (Html.BeginForm("Action", "Controller", new { id = i }, FormMethod.Post, new { id = "frm_"+ i.ToString() })) 
                {
                    <span>Label&nbsp;&nbsp;</span>
                    <input type="submit" id="@i.ToString()" value="@i.ToString()" />
                }
                </div>
            }
        </div>
    </body> 
</html>   

以及您的部分(当您拥有静态HTML时,不需要那些服务器端块@{}):

<span>Test Text</span>

答案 1 :(得分:1)

答案 2 :(得分:0)

尝试将_Test.cshtml更改为

<span>Test Text</span>

这可能是品味问题,但我更喜欢Html.PartialRenderPage