当我单击ActionLink并在控制器中设置ViewModel值时,我可以看到在呈现View时的更改。但是,当我第二次单击ActionLink时,相同的值将变为null。
如何存储值,以便它进入控制器?
查看:
@Ajax.ActionLink("Click me", "AjaxTest", "Controller", new AjaxOptions()
{
UpdateTargetId = "updatePanel",
HttpMethod = "POST",
OnSuccess = "A()"
})
<div id="updatePanel">
@Html.Partial("~/Views/Shared/_UpdatableContent.cshtml", this.Model)
</div>
控制器:
[HttpPost]
public ActionResult AjaxTest(MyViewModel model)
{
model.A = "A"
return PartialView("_UpdatableContent", model);
}
部分视图_UpdatableContent:
@Html.HiddenFor(x => x.A)
@if (Model.A == "A")
{
//Draw
}
答案 0 :(得分:1)
尝试将 this.Model 添加到您的ActionLink之后:
@Ajax.ActionLink("Click me", "AjaxTest", "Controller", this.Model, new AjaxOptions() { UpdateTargetId = "updatePanel" })
此方法将模型传递回请求,应允许更新发生。
可能我对ASP.NET MVC的最大抱怨是各种“Helper”函数被重载到n度,并且在参数出现的顺序方面并不总是一致......
希望有所帮助:)
答案 1 :(得分:1)
我遇到了同样的问题。在HttpMethod = "Post"
中设置AjaxOptions
为我修好了,谢谢Sergejs。
我的最终工作代码如下
@{
AjaxOptions ajaxOptions = new AjaxOptions
{
HttpMethod = "Post",
LoadingElementId = "product-adding-" +@Model.Product.Id,
LoadingElementDuration = 100,
OnSuccess = "AddedToCart"
};
}
<div>
@Ajax.ActionLink("Add to cart",
"AddToCart",
"Cart",
new { id = Model.Product.Id, returnUrl = Request.Url.PathAndQuery },
ajaxOptions,
new { @class = "button" })
<img id="product-adding-@Model.Product.Id" src="~/Images/ajax_loader.gif" />
</div>