Html помощник в контроллере - PullRequest
1 голос
/ 29 октября 2011

У меня есть метод расширения для получения строки из файла ресурсов в asp.net mvc 3

public static string Resource(this HtmlHelper htmlHelper, string expression, params object[] args)
        {

            string path = ((RazorView)htmlHelper.ViewContext.View).ViewPath;
            var fields =
                (ResourceExpressionFields)
                (new ResourceExpressionBuilder()).ParseExpression(expression, typeof(string), new ExpressionBuilderContext(path));
            return (!string.IsNullOrWhiteSpace(fields.ClassKey))
                       ? string.Format((string)htmlHelper.ViewContext.HttpContext.GetGlobalResourceObject(
                           fields.ClassKey,
                           fields.ResourceKey,
                           CultureInfo.CurrentUICulture), args)
                       : string.Format((string)htmlHelper.ViewContext.HttpContext.GetLocalResourceObject(
                           path,
                           fields.ResourceKey,
                           CultureInfo.CurrentUICulture), args);
        }

Вот как я использую этот метод

@Html.LabelFor(m => m.Login, Html.Resource("LoginBoxLoginField")) 

Но я не знаю, как использовать его в действии контроллера

public ActionResult MyAction()
        {
             //how to get string from resource file using my extension method?
        }

Например

 if (!ModelState.IsValid)
    ModelState.AddModelError(string.Empty, string.Empty/* should be resource string */);

Ответы [ 3 ]

3 голосов
/ 29 октября 2011

Вы не можете использовать его в контроллере, потому что у вас нет экземпляра HtmlHelper внутри контроллера.И для создания экземпляра HtmlHelper вам нужен ViewContext.И у вас есть контекст представления только внутри представления.Если вы хотите использовать это в контроллере, вам придется реорганизовать его, чтобы этот помощник зависел только от HttpContext, а не от HtmlHelper.

2 голосов
/ 29 октября 2011

Когда вы создаете ресурс в проекте с именем Resource.resx, вы можете просто вызвать:

Resource.LoginBoxLoginField

или

Resource.ResourceManager.GetString("LoginBoxLoginField")

Этот способ работает правильно, если вы создаете другой файл ресурсов с именемНапример, Resource.pt-BR.resx и установите для культуры приложения значение pt-BR

1 голос
/ 29 октября 2011

Это невозможно сделать, потому что в контексте контроллера еще не определено, какое представление вы будете использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...