Вызов метода в контроллере - PullRequest
3 голосов
/ 11 мая 2011

Я новичок в ASP.NET MVC 3, но у меня простой вопрос. Можно ли вызвать метод Controller со страницы CSHTML (Razor)?

Пример:

xxxControl.cs:

public String Bla(TestModel pModel)
{
    return ...
}

index.cshtml:

@Bla(Model) <-- Error

Спасибо.

Обновление:

Спасибо, Натан. Это не очень хорошая идея делать это таким образом. Цель: мне нужна строка форматирования для поля модели. Но куда я положил код, возвращающий строку форматирования в регистре?

Ответы [ 4 ]

18 голосов
/ 11 мая 2011

Считается плохой практикой для вызова методов, расположенных на контроллере.Обычно это действие контроллера, которое заполняет модель и передает эту модель в представление.Если вам нужно было отформатировать эту модель, вы можете написать помощник HTML.

public static class HtmlExtensions
{
    public static IHtmlString Bla(this HtmlHelper<TestModel> htmlHelper)
    {
        TestModel model = htmlHelper.ViewData.Model;
        var value = string.Format("bla bla {0}", model.SomeProperty);
        return MvcHtmlString.Create(value);
    }
}

и, на ваш взгляд:

@Html.Bla()
2 голосов
/ 11 мая 2011

Это очень затруднит юнит-тестирование вашего сайта MVC.

Возможно, вам нужен частичный вид? (что вы на самом деле пытаетесь сделать?)

0 голосов
/ 22 февраля 2012

Просто сделайте это так:

Метод действия xxxControl.cs:

public ActionResult YourView(TestModel pModel) {

    //pMomdel code here

    ViewBag.BlaResult = Bla(pModel);
    return View(pModel);
}

index.cshtml:

@ViewBag.BlaResult
0 голосов
/ 31 декабря 2011

Да, это возможно.

@using Nop.Web.Controllers;
 @
 var _CatalogController = EngineContext.Current.Resolve<CatalogController>();
 var _model = new ProductModel();
 _model = _CatalogController.PrepareProductOverviewModel(p, true, true);
}

Установите метод public, если он приватный.

Даже услуги, которые вы можете вызывать таким же образом.

var _productService = EngineContext.Current.Resolve<IProductService>();
if (Model.SubCategories.Count > 0)
{
foreach (var SubCategories in Model.SubCategories)
{
 int subcategoryid = SubCategories.Id;<br>
 IPagedList<Product> _products = _productService.SearchProducts(subcategoryid,0, null, null, null, 0, string.Empty, false, 0,null,ProductSortingEnum.Position, 0, 4);
}
i++
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...