سؤال

وأنا باستخدام بيتا MVC لكتابة تطبيق بسيط لفهم ASP.Net MVC. تطبيق بسيط على موقع مشاركة الصور / الفيديو مع وضع العلامات. أنا أعمل قبالة مشروع الهيكل العظمي MVC. أضفت بعض Html.ActionLink () الصورة لشريط التنقل، ولكن أواجه مشكلة مع واحد من Html.ActionLink () الصورة التي أضفت في بقعة واحدة.

وأريد ~ / الكلمات لإظهار كافة العلامات من قاعدة البيانات وأريد ~ / الكلمات / {العلامة} لإظهار قائمة بكافة الملفات التي يتم الموسومة ب {العلامة}. هذا يعمل كما هو متوقع، ولكن عندما تتبع ~ / الكلمات / {} العلامة، فإنه يغير Html.ActionLink () في شريط التنقل ليكون نفس / رابط ~ / الكلمات {} العلامة بدلا من مجرد لافتا إلى ~ / الكلمات. أنا لا تفهم لماذا ActionLink () في شريط التنقل بلدي يتغير عندما أتابع ~ / الكلمات / {} العلامة. إذا كنت انتقل إلى ارتباط مختلفة في المشروع، وActionLink () يعمل كما هو متوقع.

ولدي actionlink والطريق اقامة مثل هذا. بلدي TagsController له هذا العمل مؤشر. الحشرة؟ هو لمراقبة الترحيل. لقد اثنين من المشاهدات، واحدة تسمى كل واحدة تسمى تفاصيل. ما أفعل الخطأ؟

        Html.ActionLink("Tags", "Index", "Tags") // In navigation bar

        routes.MapRoute(
            "Tags",
            "Tags/{tag}",
            new
            {
              controller = "Tags", action = "Index", tag = "",
            });

        public ActionResult Index(string tag, int? id )
        {  // short pseudocode
           If (tag == "")
             return View("All", model)
           else
             return View("Details", model) 
        }
هل كانت مفيدة؟

المحلول

وأعتقد أنك تحتاج إلى معالجة مثيل yoursite.com/Tags/، كما كنت التعامل مع واحد فقط مع علامة في.

وأنا من شأنه أن يخلق طريقا آخر:

routes.MapRoute(
  "TagsIndex", //Called something different to prevent a conflict with your other route
  "Tags/",
  new { controller = "Tags", action = "Index" }
);

routes.MapRoute(
  "Tags",
  "Tags/{tag}",
  new { controller = "Tags", action = "Tag", tag = "" }
);


/* In your controller */
public ActionResult Index() // You could add in the id, if you're doing paging here
{
  return View("All", model);
}

public ActionResult Tag(string tag, int? id)
{
  if (string.IsNullOrEmpty(tag))
  {
    return RedirectToAction("Index");
  }

  return View("Details", model);
}

نصائح أخرى

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

وأود أن أقترح أن ننظر إلى تعبيرات LAMDA للتعامل مع هذا، قد ينتهي بك الأمر مع 'حساء العلامة "في المستقبل.

وأيضا، تأكد من أنك قمت بتحميل دلل Microsoft.Web.Mvc، يختلف عن System.Web.Mvc.

أين يمكن الحصول على Microsoft.Web.Mvc.dll

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