为什么我的PartialView在表单标签之外呈现
本文关键字:标签 表单 我的 PartialView 为什么 | 更新日期: 2023-09-27 18:13:43
我有一个显示"Room"对象的HTML表的视图。每个Room是表中的一行(这是一个PartialView)。
视图包含以下代码:
<table>
@foreach (var item in Model)
{
using (Html.BeginForm())
{
@Html.Partial("_roomPartial", item)
}
}
</table>
Model是一个IEnumerable<Room>
,而_roomPartial是一个包含房间属性的HTML行。
由于某些原因,Partial的HTML呈现在关闭表单标记之后(尽管在using块中):
<form action="/Room/Index" method="post"></form>
<tr>
...some boring markup...
</tr>
我试图使这个工作:
- 用
Html.RenderPartial("_roomPartial", item);
代替@Html.Partial
- 将
using (Html.BeginForm())
块移动到PartialView
每次都得到相同的HTML结果。
为什么局部呈现在表单标签之外?我怎样才能使它正确渲染呢?
视图:
@model IEnumerable<PatientAssigner.Models.Room>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.ID)
</th>
<th>
@Html.DisplayNameFor(model => model.isOccupied)
</th>
<th>
@Html.DisplayNameFor(model => model.patientComplexityLevel)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
using (Html.BeginForm())
{
@Html.Partial("_roomPartial", item)
}
}
</table>
_roomPartial:
@model PatientAssigner.Models.Room
<tr>
<td>
@Html.DisplayFor(room => room.ID)
@Html.HiddenFor(room => room.ID)
</td>
<td>
@Html.EditorFor(room => room.isOccupied)
@Html.ValidationMessageFor(room => room.isOccupied)
</td>
<td>
@Html.DropDownListFor(room => room.patientComplexityLevel,
new SelectList(Enum.GetValues(typeof(PatientAssigner.Models.PatientComplexityLevel)),
Model.patientComplexityLevel),
"")
@Html.ValidationMessageFor(room => room.patientComplexityLevel)
</td>
<td>
<input type="submit" value="Save" class="btn btn-default" id="saveBtn" />
</td>
</tr>
form
标签在table
和tr
标签之间无效。我建议改变你的观点,不要有tr
或td
标签,并在外面这样做:
<table>
@foreach (var item in Model)
{
<tr><td>
@using (Html.BeginForm())
{
@Html.Partial("_roomPartial", item)
}
</td></tr>
}
</table>
如果您需要为每一行设置一个form
,但希望您的input
分布在单元格中,您唯一的选择是像这样嵌套表:
<table>
<tr>
<td>
<form>
<table>
<tr>
<td>cell1</td>
<td>cell2</td>
<td>cell3</td>
</tr>
</table>
</form>
</td>
</tr>
<tr>
<td>
<form>
<table>
<tr>
<td>cell1</td>
<td>cell2</td>
<td>cell3</td>
</tr>
</table>
</form>
</td>
</tr>
</table>