当Ajax.ActionLink调用控制器时,ViewModel不存储值

时间:2013-01-04 13:05:31

标签: asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-ajax

当我单击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
}

2 个答案:

答案 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>