MVC3 BeginForm无法呈现<form>标签</form>

时间:2011-08-04 17:41:26

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

我的视图无法呈现打开和关闭FORM标记。以下是我的控制器的代码

    [HttpGet, Authorize]
    public ActionResult Edit(long id)
    {
        Position position = positionRepository.GetPositionById(id);
        return View(position);
    }

这是我视图中的代码(省略控件代码)

@using (Html.BeginForm("Edit", "Position", new { area = "Stock", id = Model.PositionId }, FormMethod.Post, null)){}

当调用页面时,它会呈现相应的数据,但HTML端不包含为保存修改而需要的开始和结束FORM标记。关于我可能缺少什么的任何线索?

enter image description here enter image description here

4 个答案:

答案 0 :(得分:3)

Nan::TypedArrayContents上,我发现另一个表单标记可能未关闭,或者新的BeginForm正在另一个表单标记内呈现。

要快速验证,您可以在</form>上方添加Html.BeginForm(...)

答案 1 :(得分:2)

我发现根本原因是我的母版页。添加母版页时,我选择了一个标准母版,而不是MVC3列表中的一个!我继续删除现有的母版页并添加了正确的母版页(来自MVC3列表)刷新页面并正确呈现标记。

答案 2 :(得分:1)

如果在视图中有局部视图,则在上一个窗体关闭之前不会生成窗体Id。解决方案是对所有局部视图使用BeginForm。当您有一个局部视图时,这将无效。诀窍是保持2个部分视图可以是仅用于表单关闭目的的虚拟局部视图。

答案 3 :(得分:0)

为了进一步扩展这个问题,我发现只有从父布局调用@RenderBody()时,Html.BeginForm()才有效。

我们的部分视图中的所有内容都被分组为主人定义的@sections。因此,我们只调用@RenderPage()和@RenderSection,而不是@RenderBody()。

一旦我们添加了对@RenderBody()的调用,我们的表单标签就出现了(即使我们的所有内容仍然在部分内定义,并且没有“body”内容可以呈现......)

希望这有助于其他人......花了我一段时间来弄清楚......这篇文章提供了最后的关键..