سؤال

لدي مشكلة في نموذج التوجيه مع المعاينة 5 لـ asp.net mvc.

في AccountController لدي إجراءين:

public ActionResult Delete()  
public ActionResult Delete(string username)

أثناء محاولة البحث عن الحساب/الحذف أو الحساب/الحذف؟ اسم المستخدم=davide، يقوم ControllerActionInvocer بطرح استثناء يفيد بأن طلب الحذف غامض بين طرق إجراءات السحب الخاصة بي.

لم يتم تغيير المسار الافتراضي في global.asax.

ألا ينبغي لمستدعي الإجراء أن يفهم ما هي طريقة الاتصال بالبحث في قائمة المعلمات؟

باستخدام المعاينة 4 لم أواجه هذا النوع من المشاكل في تنفيذ نفس العملية.

اي فكرة؟

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

المحلول

تم العثور على الحل!

مع تقديم ActionNameAttribute، أصبح من الضروري الآن تصفية الطريقة التي سيتم الاتصال بها يدويًا اعتمادًا على الطلب.يتم ذلك عن طريق ActionSelectionAttribute.

الشرح كامل هنا : http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

نصائح أخرى

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

نظرًا لأن السلسلة لاغية، فإن ما أفهمه هو أن الاتصال بالحساب/الحذف ببساطة سيؤدي إلى استدعاء الإجراء باستخدام معلمة اسم مستخدم فارغة والتي يمكنك بعد ذلك اختبارها في بداية طريقة الإجراء.

ما سأفعله هو التخلص من الحذف الفارغ () واستخدام الحذف (اسم مستخدم السلسلة) فقط

في توجيه عنوان URL الخاص بك، سيكون لديك شيء مشابه لـ "/{Controller}/{Action}/{username}/"؟إذا كان لديك "/{Controller}/{Action}/{Id}/" فمن الأفضل أن تقوم بحذف (معرف السلسلة) وبهذه الطريقة فقط استخدم عنوان url للتعامل مع هذا "/Account/Delete/davide/"

ومع ذلك، استخدم المسار الافتراضي الخاص بك والذي يجب أن يكون مثل المعرف الافتراضي هو ""

ثم في طريقة الحذف (معرف السلسلة) لديك:

public ActionResult Delete(string id)
{
    if(string.IsNullOrEmpty(id)) return EmptyID();

    // Continue normal Delete method
}

public ActionResult EmptyID()
{
    // The method you were going to have on a blank delete.
}

هذا أو قم فقط بلفها بطريقة واحدة على if {} else {}

في كلتا الحالتين سأتبع الطريقة الوحيدة وأقوم بإجراء افتراضي على اسم المستخدم/المعرف الخاص بك في مسارك لسلسلة فارغة وأتعامل معها بهذه الطريقة.

إذا كنت تريد الاتصال بي لمتابعة ما أعنيه، أو أي شيء سيساعدني، فاتصل بي على andrew@ my domain في صفحة المعلومات الخاصة بي.

يحرر:حسنًا، ما قاله بيركو على أي حال، لست متأكدًا من مدى فائدة السمات المُسماة - لذا يرجى نشر تعليق هنا يوضح بالتفصيل ذلك للأشخاص الآخرين الذين يجدون نفس المشكلات!:)

إنه غامض لأن إجراء التحكم هما نفس طريقة النشر ..يمكنك فقط استخدام ذلك في سيناريو نشر النموذج، على سبيل المثال، تقوم بإرسال بيانات نموذج تستخدم منشور HTTP..

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