[英]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.