![](/img/trans.png)
[英]How can protect the Asp.Net MVC 5 in the Edit action route from throwing unhandled exception?
[英]Dynamic typecasting in asp.net mvc Edit action: how can I handle multiple datatypes without throwing an exception?
我正在為按ActiveRecord建模的我設計的數據對象制作通用的MVC查看器/編輯器。
數據對象是完全通用的,它們可以具有字符串,int,int16s等主鍵,無論數據庫使用什么(該組織的持久層都將各種數據類型用作主鍵,我希望此MVC“瀏覽器/編輯器”用於處理所有)。
在“索引”視圖中創建“編輯”鏈接很容易:
Response.Write("<td>" + Html.ActionLink("Edit", "Edit", new { id = pkValue }) + "</td>");
問題在另一方面,在“編輯”操作中:
public ActionResult Edit(object id)
當我嘗試將id用作通過反射調用以從數據庫檢索水合數據對象以進行編輯的靜態“ select”方法的參數“數組”的唯一數組時,除字符串以外的任何方法都會引發異常:
object[] parameters = { id };
list = (List<T>)select.Invoke(null, parameters);
我知道參數的CLR類型,也知道object id
的“真實”類型。 我應該使用某種粗糙的case語句手動進行類型轉換,還是可以使用參數類型來進行類型轉換的技巧?
是否可以/應該將ActionResult
Edit()
重載為int
, int16
, int32
等?
我應該在這里做什么以確保無論id
為“真實”類型,我都可以將其傳遞到數據庫中而不會引發異常?
到目前為止,這是我嘗試過的方法:
我使通用控制器采用兩個類型參數,一個用於數據對象,另一個用於主鍵數據類型:
public class CoreDataController<t,T> : Controller where T:IDataObjectBase<T>
然后我嘗試了此舉:
id = (t)id;
object[] parameters = { id};
BZZZRT! “指定的演員表無效”。 id
是"2"
, t
是int?
您是否可以提供關於select方法以及您要對pull數據執行的Stored Proc或Query的更多代碼詳細信息。
我目前建議以以下方式傳遞id參數的值進行選擇。
if(id != null)
Select(id.ToString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.