كيفية تحديد المساحة الافتراضية لاستدعاء html.buildurlfromexpression

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

  •  25-09-2019
  •  | 
  •  

سؤال

لدي مشكلة مثل نص الارتباط

جميع روابطاتي تبدو هكذا: htp // الموقع/وحدة التحكم/الإجراء/المعرف

لقد أضفت للتو منطقة تسمى الخلفية.

وحدة التحكم الخاصة بي:

[ActionLinkArea("")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

الآن عندما أحاول الحصول على بعض عنوان URL Conroller باستخدام

@Html.ActionLink<HomeController >(c => c.Index(), "Home") 

جميع الأعمال بشكل جيد ، وعنوان url هو htp: // الموقع/homecontroller/index/

ولكن عندما أستخدم طريقة التمديد من microsoft.web.mvc.dll

 @Html.BuildUrlFromExpression<HomeController>(c => c.Index())

أحصل على url htp: // site/الخلفية/homecontroller/index/

كيف يمكنني الحصول على عنوان URL بدون منطقة باستخدام Buildurlfromexpression ولماذا يعمل ActionLink بشكل جيد ولكن Buildurlfromexpression لا؟

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

المحلول

إنه Microsoft Bug.

http://aspnet.codeplex.com/workitem/7764

تستخدم الطريقة داخليًا linkbuilder.buildurlfromexpression (). يستدعي الأخير Routecollection.getVirtualPath (السياق ، الروتينية) بدلاً من Routecollection.getVirtualPathforara (السياق ، الروتينية) ؛ مما يسبب نتائج غير صالحة عند استخدام المناطق.

لقد فعلت ذلك وأرجع عن عنوان URL الصحيح

نصائح أخرى

لدي إجابة أفضل!

public static string Image<T>(this HtmlHelper helper, Expression<Action<T>> action, int width, int height, string alt)
            where T : Controller
    {
        var expression = action.Body as MethodCallExpression;
        string actionMethodName = string.Empty;
        if (expression != null)
        {
            actionMethodName = expression.Method.Name;
        }
        string url = new UrlHelper(helper.ViewContext.RequestContext, helper.RouteCollection).Action(actionMethodName, typeof(T).Name.Remove(typeof(T).Name.IndexOf("Controller"))).ToString();         
        //string url = LinkBuilder.BuildUrlFromExpression<T>(helper.ViewContext.RequestContext, helper.RouteCollection, action);
        return string.Format("<img src=\"{0}\" width=\"{1}\" height=\"{2}\" alt=\"{3}\" />", url, width, height, alt);
    }

<%=Html.Image<ClassController>(c => c.Index(), 120, 30, "Current time")%>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top