0

ActionLinkをクリックして、コントローラーでViewModel値を設定すると、Viewがレンダリングされたときの変化を確認できます。しかし、ActionLinkを2回クリックすると、同じ値がControllerに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
}
4

2 に答える 2

1

次のように、 this.ModelをActionLinkに追加してみてください。

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

このメソッドは、モデルをリクエストに戻しますこれにより、更新を実行できるようになります。

おそらく、ASP.NET MVCに対する私の最大の不満は、さまざまな「ヘルパー」関数がn次にオーバーロードされており、引数が表示される順序に関して常に一貫しているとは限らないという事実です...

お役に立てば幸いです:)

于 2013-01-04T13:18:29.717 に答える
1

私はこれとまったく同じ問題を抱えていました。SergejsHttpMethod = "Post"AjaxOptions感謝します。

私の最終的な作業コードは次のとおりです

@{
    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 に答える