MVC4:调用控制器函数结果

时间:2013-06-26 16:09:54

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

我想在视图中的数据表中显示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)。   }

  3. 其中HomeController是我的控制器的名称,其中定义了函数。 但这样做,我有以下错误:

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

    在第int uID = userID.First();

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

2 个答案:

答案 0 :(得分:1)

@Html.Action("Home","getClientID", new {login=User.Identity.Name})

答案 1 :(得分:1)

你必须在你的查询中加入第一条记录,就像这样,

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方法,你也可以这样做,

在Controller的Action中加载你的视图(通常是它的索引动作)

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

然后在控制器中添加方法

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

您可以在View中调用此方法,如下所示

@ViewBag.GetClientID("Your Input string")

让我知道它是否有效?