سؤال

كونها جديدة ASP.NET MVC, كنت أتساءل عن توقيع تحكم الأساليب.في كل الأمثلة التي رأيتها ، يبدو أنهم دائما للعودة ActionResult ، حتى إذا كانوا فعلا العودة ViewResult سبيل المثال أو ما شابه ذلك.

وهنا شيوعا ينظر على سبيل المثال:

public ActionResult Index()
{
    return this.View();
}

في مثل هذه الحالة, لن يكون الأمر منطقيا أكثر أن تعلن الطريقة public ViewResult Index(), و الحصول على أقوى نوع من الدعم ؟

التجارب تشير إلى أن هذا يعمل, لذلك يبدو ممكنا.

أنا أدرك أنه قد تكون هناك حالات حيث تعدد المطلوب هو (مثلا ، إذا كنت ترغب في إعادة توجيه فقط في حالات معينة ، ولكن تظهر طريقة عرض في حالات أخرى) ، ولكن إذا كان الأسلوب دائما ترجع عرض سأجد ViewResult أكثر من المرغوب فيه.

من حيث المستقبل التوافق ، ActionResult الواضح يوفر أكثر قوة التوقيع, ولكن إذا كان أحد تسيطر على كامل قاعدة القانون ، من الممكن دائما تغيير طريقة توقيع أعم نوع الإرجاع إذا كان ينبغي أن تصبح ضرورية في المستقبل.

هي أي اعتبارات أخرى أنني لست على علم ، أو أتقدم و أعلن بلدي تحكم أساليب محددة عودة أنواع ؟

هل كانت مفيدة؟

المحلول

يمكنك بالتأكيد استخدام محددة عودة أنواع ، على الرغم من أن معظم الأمثلة على شبكة الإنترنت يبدو أن عودة ActionResult.الوقت الوحيد الذي أود أن عودة ActionResult الفئة عندما مسارات مختلفة من طريقة عمل يعود فرعية مختلفة.

ستيفن ساندرسون كما توصي العودة أنواع محددة في كتابه برو ASP.NET إطار MVC.نلقي نظرة على الاقتباس أدناه:

"هذه طريقة عمل خصيصا يعلن أنه يعود مثيل ViewResult.أنها سوف تعمل نفس الشيء إذا بدلا من ذلك طريقة العائد نوع كان ActionResult (الفئة الأساسية لكل عمل نتائج).في الواقع, بعض ASP.NET MVC المبرمجين تعلن كل عمل طرق العودة غير محدد ActionResult ، حتى لو كانوا متأكدين من أنه سوف يعود دائما واحد معين فرعية.ومع ذلك ، فإنه من مبدأ راسخ في وجوه المنحى البرمجة التي يجب أن الأساليب عودة أكثر نوع معين يمكن (وكذلك قبول معظم العامة المعلمة أنواع يمكن).بعد هذا المبدأ يزيد من الراحة والمرونة رمز المكالمات الأسلوب الخاص بك ، مثل وحدة الاختبارات."

نصائح أخرى

ودائما العودة نوع أدق يمكنك العودة. لذلك ينبغي عليك إرجاع ViewResult عندما يظهر العمل دائما وجهة نظر. وأود أن استخدام فقط ActionResult عند العودة في ViewResult في بعض الحالات (غير صالحة نشر البيانات) أو RedirectToRouteResult في حالات أخرى.

ومع بعض actionfilter متقدمة / تنفيذ السيناريو، ويمكنك حتى تعود الأمور مختلفة تماما أن لها علاقة مع ActionResult شيء.

[الجواب الجزئية]: أنت لا دائما العودة ActionResult، لا. وفيما يلي نظرة سريعة على بعض النتائج الأخرى التي يمكن إرجاع: <لأ href = "http://msdn.microsoft.com/en-us/library/dd410269٪28v=vs.98٪29.aspx" يختلط = "نوفولو noreferrer "> http://msdn.microsoft.com/en-us/library/dd410269٪28v=vs.98٪29.aspx

وربما هذا سوف يساعد قليلا. حظا سعيدا!

نعم، يمكنك تحديد الإجراءات الخاصة بك مثل: public ViewResult Index(). لكن في بعض الأحيان العمل الخاص بك يمكن أن تعود نتائج مختلفة (من المستحيل دون أن تعلن النتيجة كما الفئة الأساسية ActionResult). على سبيل المثال:

public ActionResult Show()
{
    ...

    if(Request.IsAjaxRequest())
    {
        return PartialView(...);
    }

    return View(...);
}

وأو:

public ActionResult Show()
{
    ...

    try
    {
        ...
    }
    catch(Exception)
    {
        return RedirectToAction(...);
    }

    return View(...);
}

وActionResult هو الفئة الأساسية لأنواع الإرجاع مختلفة. ذلك العمل الخاص بك يجب أن ترجع ActionResult <م> أو فئة مشتقة منه من أجل العمل. تلك الشائعة هي ViewResult، JsonResult، وما إلى ذلك.

ونعم لدي كتاب ساندرسون ل، وأنا أحب ذلك الجزء عن كونها محددة، لأن ذلك كان شيئا محيرة لي عندما كنت أبحث في الأمثلة عمل تحكم أخرى. فلسفتي حتى B4 تعلم MVC كان ذلك منذ الوظائف (الأساليب التي ترجع قيمة) ينبغي أن يعامل كما لو كنت إعلان متغير / يكون للاستبدال في سياق متغير / المرجع من نفس النوع، تكون محددة حول نوع، كما كنت أن إذا اعلان فار (أعتقد أنها الرغبة في تجنب defnining كل المتغيرات الخاصة بك كنوع "كائن" في التطبيق - أكثر قوة، ولكن تفقد بعض وقت التصميم فحص ونوع السلامة). يسهل اختبار وحدة تحكم لنوع الإرجاع الصحيح كذلك.

لإشارة ذات الصلة، وتحقق من تبديل مبدأ Listkov في (ال "L" في "صلب") أيضا.

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