我有一个包含很多组件的项目,可以使用更多选项来更新这些组件中的任何一个。因此,我认为最好使用一个下拉列表来选择要添加选项的组件,然后加载一个局部视图,该视图具有要添加选项的特定组件的输入字段,然后按提交。但这似乎不能很好地与HTML.BeginForm一起使用,我不确定为什么。更具体地说,我不知道这是因为它是局部视图还是我将Begin表单弄乱了。
编辑:抱歉,我没有解释运行此命令时会发生什么。当我按下提交按钮时,什么也没有发生。只是什么也没有发生,它不会发送到partialview的发布部分。
这是选择组件的页面:
<p></p>
<h3>What needs to be added?</h3>
<div id="match-alert" class="alert" role="alert"></div>
<select class="form-control" id="Type-Selector" name="Type-Selector">
<option value="-1">Select Option</option>
<option value="1">New Manufacturer</option>
<option value="2">New Model<option>
<option value="3">New Series</option>
</select>
<div id="partialPlaceHolder" style="display:none;"></div>
@section Scripts{
<script src="http://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#Type-Selector").change(function () {
var selectedID = $(this).val();
$.get("/Components/SelectedItem/" + selectedID, function (data) {
$('#partialPlaceHolder').html(data);
$('#partialPlaceHolder').fadeIn('fast');
})
</script>
}
[Selected Item将传回有问题的局部视图(到目前为止,我只有一个视图):
public ActionResult SelectedItem(int ID)
{
switch (ID)
{
case 1:
return PartialView("_UpdateManufacturer");
}
return View();
}
返回的局部视图:
@model AutoDealer.ViewModels.UpdateManufacturerViewModel
<table id="ManufactureEntry" class="d-flex justify-content-center" style="width:20%">
<thead>
<tr>
<th>New Manufacturer</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
@using (Html.BeginForm("_UpdateManufacturer","Components", FormMethod.Post))
{
<td>@Html.TextBoxFor(Model => Model.Manufacturer.cDescription )</td>
<td><input id="submit" type="submit" value="Add" /></td>
}
</tr>
</tbody>
</table>
所以我已经找到了解决方案,但我不知道为什么更改有效。我将发布所做的更改。我已经将Html.BeginForm移动到表组件上方。这是代码更改:
@model AutoDealer.ViewModels.UpdateManufacturerViewModel
@using (Html.BeginForm("_UpdateManufacturer","Components", FormMethod.Post))
{
<table id="ManufactureEntry" class="d-flex justify-content-center" style="width:20%">
<thead>
<tr>
<th>New Manufacturer</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>@Html.TextBoxFor(Model => Model.Manufacturer.cDescription )</td>
<td><input id="submit" type="submit" value="Add" /></td>
</tr>
</tbody>
</table>
}
现在,当将局部视图加载到主选择页面中时,提交按钮将起作用。我不知道的是为什么此修复程序可以做到这一点。如果有人对我真正想知道的原因有一个猜测或理解,因为当我自己加载部分视图时,旧代码就会起作用。仅当partialview在另一页中加载时它才起作用。