我有这个局部观点。这是有效的,即,当用户点击按钮时,对服务器进行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>
}
答案 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);
}