ASP.NET MVC3 RenderPage & Html.BeginForm

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辅助程序,则不会生成任何标签。不知道发生了什么,请问有人能帮我吗?

2
你为什么要用代码块包装你的页面? - SLaks
3个回答

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>

我知道,这只是为了尽量简化页面内容。 - Roberto


0

尝试将您的_Test.cshtml更改为

<span>Test Text</span>

这可能是个人口味问题,但我更喜欢使用Html.Partial而不是RenderPage


没错,这是个品味问题,但无论如何,如果您使用RenderPage它就无法正常工作,我想知道为什么。 - Roberto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接