簡體   English   中英

提交Ajax.BeginForm將目標div替換為整個頁面

[英]Submitting an Ajax.BeginForm replaces the target div with the whole page

我有一個局部視圖,其中包含用於獲取用於插入/更新數據庫記錄的數據的表單。 具有部分視圖的頁面顯示沒有問題。 填寫數據並過帳表格可以正常工作(記錄已正確保存到數據庫中)。 問題是,盡管我返回了部分視圖( return PartialView(); ),但系統將目標div替換為整個頁面(而不僅是部分視圖)!

從以上症狀,您可以了解:

  • 響應的控制器是正確的控制器(記錄保存在DB中)。
  • 必要的js腳本沒有丟失(實際上ajax替換了頁面的一部分)

請注意,部分視圖以Layout = ""開頭(因此它不引用任何布局)。 我也用Layout = null進行了測試,結果相同。

其他詳情:

  • Visual Studio社區2015
  • 容器頁面是通過Umbraco CMS實施的。

部分視圖

@using FLATS;

@model TMSCounterpartyModel
@{
    Layout = "";

    TMSCounterpartyModel myModel = (TMSCounterpartyModel)Model;

    Html.EnableClientValidation(true);
    Html.EnableUnobtrusiveJavaScript(true);

    AjaxOptions ajaxOpt = new AjaxOptions {
        HttpMethod = "POST",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "frmEditCounterparty"
    };
}

@using(Ajax.BeginForm("HandlePost", "EditTMSCounterparty", null, ajaxOpt, new { @id="editCptyForm" }))
{

    @Html.AntiForgeryToken()

    <div class="row">

        <fieldset>
            @Html.HiddenFor(model => model.Id)

...

                <div class="row margin-top-20">
                    <div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-3 col-md-8 col-md-offset-2">
                        <input id="btnSubmit" type="submit" value="Save" class="form-control" />
                    </div>
                </div>

        </fieldset>

    </div>
}

控制器

public class EditTMSCounterpartyController : System.Web.Mvc.Controller
{
    [HttpPost]
    [ValidateAntiForgeryToken()]
    public PartialViewResult HandlePost(TMSCounterpartyModel model)
    {
        string viewPath = Library.PartialViewFullPath("EditCounterparty.cshtml");

        if (ModelState.IsValid == false)
        {
            return PartialView(viewPath, model);
        }

        if (model.Save() == true)
        {
            TMSCounterpartyModel newModel = new TMSCounterpartyModel();
            newModel.LoadOrDefault(model.Id);

            return PartialView(viewPath, newModel); 
        }
        else
        {
            return PartialView(viewPath, model);
        }
    }
}

任何幫助表示贊賞。

先感謝您。

最終,問題似乎與“地圖路線”有關。 我添加了RouteTable.Routes.MapRoute("EditCpty", "EditTMSCounterparty/{action}", new { controller = "EditTMSCounterparty", action= "OpenForm" }); 問題解決了。

雖然,我仍然不明白為什么MVC會找到控制器,但是它弄亂了返回的PartialViewResult。 無論如何。

謝謝大家的努力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM