我终于用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调用。

10-02 01:28