الإخراج الحلاقة لا يعمل في MVC 3 ولكن العمل في MVC 2

StackOverflow https://stackoverflow.com/questions/4287827

  •  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.

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