【问题标题】:MVC4 : call controller function result in viewMVC4:调用控制器函数结果在视图中
【发布时间】:2013-06-26 16:09:53
【问题描述】:

我想在视图的数据表中显示找到的 ID。为此,我执行以下操作:

  1. 创建将返回 ID 的函数:

    public int getClientID(string login)
    
        {
            var context = new MyEntity(new Uri("host/MyWCF.svc/"));
    
            var userID = from persons in context.PERSON
                         where persons.LOGIN == login
                         select persons.USER_ID;
    
            int uID = userID.First();
            var cli = from client in context.CLIENT
                      where client.USER_ID == uID
                      select client.CLIENT_ID;
            int cliID = cli.First();
            return cliID;
        } 
    
  2. 而且,在我看来:

    客户:@{ ((HomeController)(this.ViewContext.Controller)).getClientID(User.Identity.Name); }

HomeController 是定义函数的控制器的名称。 但是这样做,我得到了以下错误:

Can only specify query options (orderby, where, take, skip) after last navigation

在线int uID = userID.First();

那么,为什么我会出现这个错误(因为我在 te 视图中使用了良好的命名空间),而且,这是一种很好的工作方式吗? 谢谢!

【问题讨论】:

  • 你应该先尝试理解MVC模式...
  • 我知道融合视图和控制器根本不是一个好主意!快点,如何进行?
  • 提示:getClientId 方法属于模型。控制器应该调用它并将 ID 传递给视图。

标签: asp.net-mvc-4 razor visual-studio-2012


【解决方案1】:
@Html.Action("Home","getClientID", new {login=User.Identity.Name})

【讨论】:

    【解决方案2】:

    您必须像这样在查询本身中获取第一条记录,

    public int getClientID(string login)
    
        {
            var context = new MyEntity(new Uri("host/MyWCF.svc/"));
    
            var userID = (from persons in context.PERSON
                         where persons.LOGIN == login
                         select persons.USER_ID).FirstOrDefault(); //Take First ID here inside query 
    
            //So you can use userID directly in second query. 
            //But you have to check for null as well.
    
            var cli = (from client in context.CLIENT
                      where client.USER_ID == userID
                      select client.CLIENT_ID).FirstOrDefault();
            //int cliID = cli.First();
            return cli ;
        } 
    

    要在 View 中轻松调用 Controller 方法,您也可以这样做,

    在加载视图的控制器的操作中(通常是它的索引操作)

    添加此行以在 ViewBag 中创建新的动态函数。 ViewBag.GetClientID = new Func(getClientId);

    然后在你的控制器中添加方法

    private int getClientId(string arg)
    {
           //Your stuff
    }
    

    你可以像这样在View里面调用这个方法,

    @ViewBag.GetClientID("Your Input string")
    

    让我知道它是否有效?

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多