احصل على النموذج المرتبط بالعرض المقابل في htmlhelper
-
28-09-2019 - |
سؤال
وجهة نظري يرث Models.MyModel
<%@ Page Language="C#" MasterPageFile="Something.Master" Inherits="Models.MyModel>" %>
أحتاج إلى عقار Model.Something
لتكون متاحة في أ HtmlHelper
الطريقة عندما أسميها من هذا العرض.
<%= Html.CustomHelper(...) %>
هل هناك أي طريقة للوصول إلى هذا؟ ربما عبر ViewContext
أو ViewDataDictionary
?
لا أريد أن أمر بشكل صريح Model.SessionKey
لكل مساعد أتصل به. هل هناك أي نهج فاتني؟ أم أن هذا مستحيل.
شكرًا.
المحلول
سيكون مقاربي في هذا الأمر هو أن يكون لديك جميع النماذج التي تريد استخدامها مع هذا المساعد تنفيذ واجهة تحدد خصائصها المشتركة. تحتوي خاصية ViewData على كائن HTMLHelper على خاصية نموذج (من النوع object
). داخل المساعد الخاص بك ، يمكنك إلقاء هذا كنوع الواجهة. على افتراض أنه غير فائق في تلك المرحلة ، أي في الواقع ليس فارغًا والنوع الصحيح ، يمكنك بعد ذلك استخدام الخصائص الشائعة.
public static string CustomerHelper( this HtmlHelper helper, ... )
{
var model = helper.ViewData.Model as ISessionModel;
var sessionKey = model.SessionKey;
...
}
نصائح أخرى
وبالمثل ، يمكنك القيام بذلك:
public static string CustomerHelper( this HtmlHelper helper, ... )
{
ISessionModel model = helper.ViewData.Model;
var sessionKey = model.SessionKey;
...
}
الفرق الوحيد هو أنه ليس عليك القيام بممثلين ....