簡體   English   中英

如何用模型刷新視圖

[英]How to Refresh View with Model

我有一個表單,其中包含一堆用戶需要填寫的字段。 一部分具有一個文本框,用戶可以在其中輸入參考號,然后單擊下面的鏈接以刷新視圖,並填寫大多數字段。

@Html.ActionLink("Copy", "CopyFrom", "Logistics", "",new { onclick = "this.href += '&val=' + document.getElementById('ExistingRefNumber').value;" })

這是CopyFrom ActionResult的代碼

        [HttpGet]
        public ActionResult CopyFrom(string val)
        {
            int id;
            if (int.TryParse(val, out id))
            {
                var fromModel = new LogisticsModels();
                fromModel = fromModel.GetLogisticsObject(id);

                if (fromModel != null)
                {
                    model = new LogisticsModels();
                    model = fromModel;
                    return View("Index", model);
                }
            }
            return null;
        }

一切正常,但是我注意到的是地址欄中的網址已從

Views/Logistics/Index

Views/Logistics/CopyFrom&val=15551

因此,當用戶單擊“提交”按鈕時,會出現一個錯誤,因為它找不到CopyFrom視圖。

我需要怎么做才能使它再次起作用?

編輯1我有上述工作。 上面提到的第二個問題是我的表單有一個提交按鈕,該按鈕應該調用Index(LogisticsModel模型),但是它正在嘗試查找Logistics / CopyFrom。 僅當用戶單擊復制鏈接(如上所示)時,才會發生此問題。 我不確定如何顯式調用Index ActionResult並傳遞模型。

我認為問題是CopyFrom&val=15551 &應該是? 在HTTP URL查詢字符串中, ? 表示查詢字符串的開始,然后是第一個參數及其值。 然后,使用&將后面的參數&先前的參數分隔開,但是&對於開始查詢字符串無效。

例如

CopyFrom?firstParam=1&val=15551

兩個參數發送到服務器的有效方法。

在您的情況下,您只有一個參數,因此您希望最終得到

CopyFrom?val=15551

只需更改代碼

"this.href += '&val='

"this.href += '?val='

而且你應該沒事。 (注意,URL仍將更改為CopyFrom,但是“索引”視圖代碼將用於呈現響應,這很好。)

如果調試服務器端代碼,則會發現錯誤結果是C#中val始終為null ,因為.NET無法正確地從querystring中讀取參數(因為正如我所解釋的那樣,querystring無效) 。 然后,這將導致TryParse失敗,因此操作方法將返回null而不是“ Index”視圖。


PS,您絕對不應該從操作方法中返回null-處理此問題的正確方法是返回視圖,但顯示錯誤消息-通過模型狀態錯誤,或者只是ViewBag中的一些自定義內容,甚至重定向到一般錯誤頁面(如果問題無法恢復)。 您應該已經可以在網上找到很多此類事例。 但是您應該始終將某些內容返回給瀏覽器-畢竟您是否聽說過一個網頁,如果您犯了一個小錯誤,它只是空白而沒有任何解釋?

暫無
暫無

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

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