الإخراج الحلاقة لا يعمل في MVC 3 ولكن العمل في MVC 2
-
28-09-2019 - |
سؤال
هذا الرمز نفسه يعمل بشكل جيد مع MVC 2 ولكن لا يعمل في MVC 3 Razor. بمجرد تحميل الصفحة لا يتم تحميل قائمة من htmlhelper تسمى داخل الحلاقة كما هو موضح أدناه.
قائمة متشددين للاختبار الذي لا يتم إخراجه على الصفحة.
using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using myproject.Extensions;
public static class MenuHelper
{
public static string TabbedMenu(this HtmlHelper helper, IEnumerable<MenuTab> tabs)
{
//I have hard coded menu for testing purpose.
return "<div class='menu-image'><img src='/content/Images/common/on-left.gif' alt='' /></div><div class='on'><a class='over' href='/?Length=4'>Home</a></div><div class='menu-image'><img src='/content/Images/common/on-right.gif' alt='' /></div><a href='/Home/About'>About</a><a href='/Home/Contact'>Contact</a>";
}
}
فيما يلي رمز Razor CSHTML.
@{Html.TabbedMenu
(
new List<MenuTab>
{
MenuTab.Create("Home", "Index", "Home"),
MenuTab.Create("About", "About", "Home"),
MenuTab.Create("Contact", "Contact", "Home")
}
);}
المحلول
رمز التفاف في @{ ... }
(كما فعلت) هو ما يعادل حلاقة <% ... %>
(بدون =
).
لذلك ، فإن الكود الخاص بك يستدعي الوظيفة ، لكنه لا يفعل أي شيء بالنتيجة.
يجب عليك إزالة {}
و ال ;
وببساطة اكتب @Html.TabbedMenu(...)
; ؛ هذا يعادل <%: Html.TabbedMenu(...) %>
.
ستحتاج أيضًا إلى تغيير الطريقة لإرجاع ملف HtmlString
لمنع الحلاقة من الهروب من HTML.
لا تنتمي إلى StackOverflow