0

当我单击 ActionLink 并在控制器中设置 ViewModel 值时,我可以看到渲染视图时的变化。但是当我第二次单击 ActionLink 时,相同的值会作为 null 进入 Controller。

如何存储值,使其进入控制器?

看法:

 @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
}
4

2 回答 2

1

尝试将this.Model添加到您的 ActionLink 中:

@Ajax.ActionLink("Click me", "AjaxTest", "Controller", this.Model, new AjaxOptions() { UpdateTargetId = "updatePanel" })

此方法将模型传回请求中,这应该允许更新发生。

可能我对 ASP.NET MVC 最大的抱怨是,各种“Helper”函数被重载到第 n 度,并且在参数出现的顺序方面并不总是一致......

希望有帮助:)

于 2013-01-04T13:18:29.717 回答
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>
于 2013-11-14T22:14:25.763 回答