我的视图无法呈现打开和关闭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标记。关于我可能缺少什么的任何线索?
答案 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”内容可以呈现......)
希望这有助于其他人......花了我一段时间来弄清楚......这篇文章提供了最后的关键..