直接从 Razor 视图调用控制器操作方法
本文关键字:调用 控制器 操作方法 视图 Razor | 更新日期: 2023-09-27 17:56:22
我环顾四周,找不到简单的解决方案。
我已经尝试了@GetUserName
不起作用。
我已经尝试了@ { GetUserName
不起作用。
必须有一种简单的方法可以从 razor 视图引擎调用方法。
它位于foreach
循环内。
我需要GetUserName(item.userID)
以下代码在我的控制器中:
[ChildActionOnly]
public string GetUserName(int userID)
{
ProPit_User user = db.ProPit_User.Find(userID);
return user.username;
}
尝试直接从视图调用控制器操作方法通常是设计不佳的标志。
您有几个选择,具体取决于您要执行的操作:
- 避免调用该方法,而是将数据放入模型中,并呈现模型
- 使用 Html.RenderAction
- 将该方法放在另一个类中,并使用正常的函数语法。
(1)通常是我的默认方法,通常包含显示模板和编辑器模板
对于 (3),例如
public static class Util
{
public string MyUtilMethod(int blah)
}
和观点:
@Util.MyUtilMethod(1)
尽管您可以从视图中获取控制器实例,但这样做是完全错误的,因为它违反了整个 MVC(和 MVVM)范例,因为视图不应知道其控制器。
(我能想到的唯一可能的原因可能是从模拟视图测试控制器,尽管即使在这里,也应该可以直接从单元测试中测试公开的控制器功能):
@{
var controller = ViewContext.Controller as MyController;
var userName = controller.GetUserName(123);
}
获得此结果的更好方法是让控制器预填充,并将View
所需的所有数据(例如userName
)传递给自定义ViewModel
(由 Razor 页面顶部的 @model
指令键入)或ViewBag
动态。