سؤال

وجهة نظري يرث 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;

    ...
}

الفرق الوحيد هو أنه ليس عليك القيام بممثلين ....

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top