C# 直接从Razor视图调用控制器操作方法
我环顾四周,找不到一个简单的解决办法 我尝试了C# 直接从Razor视图调用控制器操作方法,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我环顾四周,找不到一个简单的解决办法 我尝试了@GetUserName,但无效。 我尝试了@{GetUserName,但不起作用 必须有一种简单的方法从razor视图引擎调用方法 它位于foreach循环中 我需要GetUserName(item.userID) 以下代码在我的控制器中: [ChildActionOnly] public string GetUserName(int userID) { ProPit_User user = db.ProPit_User.Find(use
@GetUserName
,但无效。我尝试了
@{GetUserName
,但不起作用
必须有一种简单的方法从razor视图引擎调用方法
它位于foreach
循环中
我需要GetUserName(item.userID)
以下代码在我的控制器中:
[ChildActionOnly]
public string GetUserName(int userID)
{
ProPit_User user = db.ProPit_User.Find(userID);
return user.username;
}
试图直接从视图中调用控制器操作方法通常是糟糕设计的标志 您有几个选项,具体取决于您尝试执行的操作:
@Util.MyUtilMethod(1)
尽管可以从视图中获取控制器实例,但这样做显然是错误的,因为它违反了整个MVC(和MVVM)范式,因为视图不应该知道它的控制器
(我能想到的唯一有用的原因可能是从模拟视图测试控制器,尽管即使在这里,也可以直接从单元测试测试公开的控制器功能):
获得此结果的更好方法是,控制器将
视图所需的所有数据(如用户名
)预填充到自定义视图模型
(由页面顶部的@model
指令键入),或到ViewBag
dynamic。您是否尝试初始化对象以调用答案中提到的方法,我将重新考虑该设计。如果您仍然必须遵循该方法,您可以使用@Html.Action(“GetUserName”,“YourController”,new{userID=1})从视图调用子操作
我会-1这个,但是我的鼠标靠近这个答案时会觉得脏。是的,它回答了OP的问题,即必须有一个简单的方法从razor视图引擎调用方法。
,但正如大家所说,这通常是一件疯狂的事情。每个人都应该很高兴我编写了一个单独的模型,现在它可以工作了正如我所希望的那样,通过模型传递所有信息。:@DanielGimenez相反,你可以指出错误并纠正它。这不像很多人已经知道答案了。。。
@Util.MyUtilMethod(1)
@{
var controller = ViewContext.Controller as MyController;
var userName = controller.GetUserName(123);
}