簡體   English   中英

Ajax.beginForms MVC部分視圖

[英]Ajax.beginForms MVC Partial View

我正在使用ajax.beginform在另一個視圖中創建局部視圖。

如果用戶輸入正確的sn,一切正常。 但是,如果用戶輸入的數字無效,我想重定向到索引視圖。

現在,索引頁面本身已作為部分視圖提交。

我如何避免這種情況。

這是我的觀點的一部分,並提供2個簡化的操作結果。

 @using (Ajax.BeginForm("MachineInfo", "QrCreate", new AjaxOptions() { 
 HttpMethod = "POST", UpdateTargetId = "form-content", InsertionMode = 
 InsertionMode.ReplaceWith }))
 {
            @Html.AntiForgeryToken()

            <input type="text" id="sn" name="sn" class="inputsn" 
              placeholder="Enter your serial number here..." />

            <input type="submit" value="Search" class="search btn btn-success btn-lg" />

 }
    </div>

</div>
<div id="form-content"></div>

我的控制器

  public ActionResult Index(bool? isValidMachine = null)
    {
        ViewBag.invalidSerialNumber = isValidMachine;
        return View();
    }
    [HttpPost]
    public ActionResult MachineInfo(string sn)
    {

        if(string.IsNullOrEmpty(sn))
        RedirectToAction("Index", new { isValidMachine = false });


       QrCreateViewModel qrCreateVM;
       using (var machineService = new MachineApiService())
        {

            var machine = machineService.GetMachineFromSerialNumber(sn);
            if (machine == null)
                return RedirectToAction("Index", new { isValidMachine = false });
            else
            qrCreateVM = new QrCreateViewModel(machine, GetBasePath());
        }

       if (qrCreateVM.IsValid())
       {
           qrCreateVM.Viewurl = qrCreateVM.QrCreateUrlOrDefaultNull();
           return PartialView(qrCreateVM);
       }

       else
         return  RedirectToAction("Index", new { isValidMachine = false });
    }

Ajax調用不會重定向(進行調用的目的是保持在同一頁面上)。

在你的控制器的方法,更換的情況下, return RedirectToAction(...)返回一個HttpStatusCodeResult指示錯誤,然后你就可以在處理OnFailure選項重定向到Index()方法。

例如

[HttpPost]
public ActionResult MachineInfo(string sn)
{

    if (string.IsNullOrEmpty(sn))
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Bad Request");
    }
    ....

然后在Ajax.BeginForm()

@using (Ajax.BeginForm("MachineInfo", "QrCreate", new AjaxOptions() { 
    HttpMethod = "POST", 
    UpdateTargetId = "form-content",
    InsertionMode = InsertionMode.ReplaceWith,
    OnFailure = "redirect"
}))
{
    ....

並添加以下腳本進行重定向

function redirect(ajaxContext) {
    location.href = '@Url.Action("Index")';
}

暫無
暫無

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

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