我正在使用 MVC3、Razor 和 C#。
我已经为网格实现了一个简单而强大的内联编辑解决方案。
基本上,我使用 Razor 构建包含网格的表单,然后将与项目 ID 匹配的行打开为可编辑的行,该行被编码为部分视图。
网格视图(部分):
@using (Html.BeginForm("Edit", "GridTest"))
{
<table>
<tr>
<th>col1</th>
<th>Col2</th>
</tr>
@{
foreach (var item in Model)
{
<tr>
@{
if ((Model.ItemId == item.Id))
{
Html.RenderPartial("_EditRow", item);
}
else
{
Html.RenderPartial("_DisplayRow", item);
}
}
</tr>
}
</table
}
编辑行.cshtml
@Html.TextBoxFor(p=>p.Name) 保存取消 @Html.HiddenFor(p=>p.Id)
显示行.cshtml
<td>
@Model.Name
</td>
<td>
@Html.ActionLink("Edit", "Edit", "GridTest", new {id = Model.Id}, null)
</td>
GridTest/编辑操作
public ActionResult Edit(int id)
{
var myRecord = db.Orders.First(p => p.Id == id);
return View("Index",myRecord);
}
GridTest/编辑发布操作
[HttpPost]
public ActionResult Edit(Order myRecord, string btn="")
{
if (btn == "Save")
{
if (ModelState.IsValid)
{
Order myCurrentRecord = db.Order.First(p => p.Id == myRecord.Id);
myCurrentRecord.Name = myRecord.Name;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(myRecord);
}
else
{
return RedirectToAction("Index");
}
上面的代码显示了设计。它工作得很好而且很简单。但是,它会导致整个页面的回发,我想停止这种“浮华”。所以我怀疑我需要以某种方式调整上面的代码,以便“EditRow”内联发布,而不刷新整个页面。我怀疑我正在考虑使用 Ajax?
那么如何简单地升级上面的代码来防止完整的页面刷新,而是行刷新呢?
提前谢谢了。