我正在使用ASP.NET MVC5应用程序,并且我有partialView,我在添加和删除操作中都使用,并且我有单独的ActionResult来处理每个请求,请根据jQuery Ajax函数进行fire....当我尝试编辑记录时,我会发现问题。它选择正确的记录并在httpget ActionResult中的屏幕上显示,但是当我提交带有更新字段的记录时,它不会在数据库中进行更新,这是因为它不会将RecordID {pk}发送回控制器中的操作,除非我使用隐藏的值对于视图中的主键...但是,我无法创建新记录!
部分视图
@model DatabaseLayer.TableMappings.FeeZone
<script>
function CancelPage() {
$.ajax({
type: "POST",
url: "/Qualification/FeeZoneHome",
dataType: 'json',
success: function (jsonData) {
window.location = jsonData.redirectUrl;
},
error: function (error) {
}
});
}
</script>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>FeeZone</h4>
<hr />
@Html.ValidationSummary(true)
<!--<div class="form-group">
<div class="col-md-10">
@Html.HiddenFor(model => model.FeeZoneID)
</div>
</div>-->
<div class="form-group">
@Html.LabelFor(model => model.FeeZoneDescription, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FeeZoneDescription)
@Html.ValidationMessageFor(model => model.FeeZoneDescription)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default">
<input type="button" value="Cancel" class="btn btn-default" onclick="CancelPage();" />
</div>
</div>
</div>
}
控制器方法
[HttpGet]
public ActionResult EditFreeZoneByID(string FreeZoneID)
{
int numID = Convert.ToInt32(FreeZoneID);
return PartialView("Partial_CreateNewFreeZone", Q_UOF.GetFreeZoneByID(numID));
}
[HttpPost]
public ActionResult EditFreeZoneByID(FeeZone obj)
{
try
{
if (ModelState.IsValid)
{
Q_UOF.EditSubject(obj);
}
}
catch (DataException)
{
ModelState.AddModelError("FeeZone", "Unable to Save Changes.");
}
return RedirectToAction("FreeZone");
}
您需要将主要键值从表单发送到操作方法,以便它可以更新正确的记录。为此,您肯定需要将ID保存在隐藏字段中。
我不确定您的意思是"如果保留隐藏的变量,您将无法创建新记录"。我认为这不会成为问题。您可以使用相同的HTTPPOST操作方法保存新记录并更新现有记录。您可以简单地检查主密钥属性的值,如果是0,请添加新记录,else Update Report Record
[HttpPost]
public ActionResult EditFreeZoneByID(FeeZone obj)
{
if(obj.FreeZoneID==0)
{
//This is a new record. Save it
}
else
{
//Update an existing record now.
}
// to do : Return somethign valid or redirect
}