我终于用ajax更新了partialview。部分视图的用途是一个侧边栏小部件,它显示注册的内容,并允许从注册中删除项。
PartialView的缩写版本如下:
<table id="item-entries">
@foreach (var item in Model.Items)
{
<tr>
<td>@item.Name</td>
<td>@item.Price</td>
<td>
@using (Ajax.BeginForm("RemoveItemEntry", "Registration", new AjaxOptions { UpdateTargetId = "item-entries" }))
{
<button type="submit" name="ItemId" value="@item.ItemId">×</button>
}
</td>
</tr>
}
</table>
下面是一个简短的操作示例:
[HttpPost]
public ActionResult RemoveItemEntry(ItemViewModel data)
{
// Perform logic to remove the item from the registration
// then return the PartialView with updated model
return PartialView("~/Views/Partials/ItemEntries.cshtml", model);
}
}
这很好,但是我不想为那些禁用javascript的人提供一个坏的体验。如果在禁用javascript的情况下发布表单,则操作仍会正确执行,但会重定向到呈现partialview和其他内容的url。我想发生的是,对于禁用了javascript的用户,它们被重定向回发布表单的原始页面。
这是可以实现的吗?
最佳答案
所以你有两个选择:
第一种方法是将action方法更改为:
[HttpPost]
public ActionResult RemoveItemEntry(ItemViewModel data)
{
// Perform logic to remove the item from the registration
// then return the PartialView with updated model
if (Request.IsAjaxRequest())
{
return PartialView("~/Views/Partials/ItemEntries.cshtml", model);
}
else
{
// return the initial View not the parial fie
}
}
第二个选项是用一个调用返回初始视图的action方法的normal替换ajax表单。然后,您将不得不编写一个jquery代码,在表单提交时进行ajax调用,但它将对返回partialview的第二个方法进行ajax调用。