簡體   English   中英

ASP.NET MVC中的動態類型轉換編輯操作:如何在不引發異常的情況下處理多種數據類型?

[英]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()重載為intint16int32等?

我應該在這里做什么以確保無論id為“真實”類型,我都可以將其傳遞到數據庫中而不會引發異常?

到目前為止,這是我嘗試過的方法:

我使通用控制器采用兩個類型參數,一個用於數據對象,另一個用於主鍵數據類型:

public class CoreDataController<t,T> : Controller  where T:IDataObjectBase<T>

然后我嘗試了此舉:

id = (t)id;
object[] parameters = { id};

BZZZRT! “指定的演員表無效”。 id"2"tint?

您是否可以提供關於select方法以及您要對pull數據執行的Stored Proc或Query的更多代碼詳細信息。

我目前建議以以下方式傳遞id參數的值進行選擇。

if(id != null)
  Select(id.ToString());

暫無
暫無

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

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