如何在没有完全替换的情况下更新部分视图

时间:2013-12-18 13:43:56

标签: asp.net-mvc

我有这个局部观点。这是有效的,即,当用户点击按钮时,对服务器进行ajax旅行,并更新部分视图并将其关闭并用更新的Div替换当前div并显示促销消息。

然而,似乎应该有更好的方法来做到这一点。换句话说,是否有必要更换整个局部视图?有没有办法只将数据发送到服务器,然后在它返回时只更新消息,比如可能通过JSON调用?

控制器:

public ActionResult ApplyPromoCode(OrderViewModel orderViewModel) {
        orderViewModel.PromoMessage = "Promo has been applied";
        return PartialView("PromoPartial", orderViewModel);
    }

部分视图:

    @model NTC.PropertySearch.Models.OrderViewModel
    @using (Ajax.BeginForm("ApplyPromoCode", "OrderSummary", new AjaxOptions { InsertionMode =     InsertionMode.Replace, UpdateTargetId = "promo" }))
    {
        <div id="promo">
        <table>
        <td>
            @Html.LabelFor(m => m.PromoCode)
        </td>

        <td>
            @Html.TextBoxFor(m => m.PromoCode)
        </td>

        <td>
            @Html.ValidationMessageFor(m => m.PromoCode)
        </td>
            <td>
                <input type="submit" value="Apply Promo Code" />
            </td>
            <td>
                @Html.DisplayFor(m=> m.PromoMessage)
            </td>
    </table>
</div>
}

2 个答案:

答案 0 :(得分:2)

你可以这样做

控制器

public ActionResult ApplyPromoCode(OrderViewModel orderViewModel) {
        //your processing code
        return Content("Promo has been applied");
    }

查看

 @model NTC.PropertySearch.Models.OrderViewModel
    @using (Ajax.BeginForm("ApplyPromoCode", "OrderSummary", new AjaxOptions {  UpdateTargetId = "pcode" }))
    {
        <div id="promo">
        <table>
        <td>
            @Html.LabelFor(m => m.PromoCode)
        </td>

        <td>
            @Html.TextBoxFor(m => m.PromoCode)
        </td>

        <td>
            @Html.ValidationMessageFor(m => m.PromoCode)
        </td>
            <td>
                <input type="submit" value="Apply Promo Code" />
            </td>
            <td>
                <div id="pcode"></div>
            </td>
    </table>
</div>
}

答案 1 :(得分:0)

您可以随时返回JSON对象/数组或某些XML,并在回调函数上使用jQuery / JavaScript来更新输入字段的值,而不是返回PartialView。

以下是我用来从Controller返回JSON的一些代码示例:

public ActionResult CurrentTags(int entityID)
{
        Entity entity = db.Entity.Find(entityID);
        var tags = from tag in entity.Tag
                   select new
                   {
                       id = tag.Name,
                       text = tag.Name
                   };
        return this.Json(tags, JsonRequestBehavior.AllowGet);
}