James Wilson James Wilson - 1 year ago 53
C# Question

Calling controller action method directly from Razor View

I looked around and couldn't find an easy solution.

I've tried

@GetUserName
which doesn't work.

I've tried
@ { GetUserName
which doesn't work.

There has to be an easy way to call a method from the razor view engine.

It is within a
foreach
loop.

I need
GetUserName(item.userID)


The below code is in my controller:

[ChildActionOnly]
public string GetUserName(int userID)
{
ProPit_User user = db.ProPit_User.Find(userID);

return user.username;
}

Answer Source

Trying to call a controller action method directly from your view is usually a sign of bad design.

You have a few options, depending on what you are trying to do:

  1. Avoid calling the method, instead put the data in your model, and render the model
  2. Use Html.RenderAction
  3. Put the method in another class and use normal function syntax.

(1) is usually my default approach, often incorporating DisplayTemplates and EditorTemplates

For (3), e.g.

public static class Util
{
    public string MyUtilMethod(int blah)
}

And the view:

@Util.MyUtilMethod(1)
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download