从view-MVC .NET调用非Action方法

时间:2013-09-18 23:21:04

标签: asp.net-mvc asp.net-mvc-4

我想在视图中调用非动作方法。我能这样做吗?换句话说,我的控制器中有一个返回字符串的方法。我想在我的视图(.cshtml)中调用该方法并在视图中显示它。我只能看到,方法应该返回一个ActionResult。但在我的情况下,我不需要返回一个字符串的视图。

5 个答案:

答案 0 :(得分:6)

执行此操作的最佳方式(和MVC约定方式)是使用ViewModel。快速举例:

<强>模型

public class MyViewModel {
    public string StringValue { get; set; }
}

<强>控制器

public class MyController : Controller 
{
    public ActionResult MyView() 
    {
        var model = new MyViewModel
        {
            StringValue = CallMyMethod()
        }

        return View(model);
    }
}

查看

@model MyViewModel @*(use fully qualified namespace)*@

@Model.StringValue @*<-- this will print it out on the view*@

希望有所帮助!

答案 1 :(得分:2)

如果你愿意,你可以这样做。

虽然我不称之为好习惯。

你可以在视图上调用你想要的任何方法,但你应该尽量让你的视图尽可能干净,并尽可能减少你需要的逻辑。

在您的控制器中,您可以使用以下方法。

public string GetName(string name)
{
   return string.Format("<strong>{0}</strong>", name);
}

在您看来,您可以按照以下方式使用它。

@{var c = new Controller();}

@c.GetName("My Name") //some other place in your view

答案 2 :(得分:0)

您可以通过调用Html.Action() or Html.RenderAction()

将查看/部分视图返回到其他视图

我个人从未需要从不是ActionResultas there are quite a few的基类的方法返回值。

答案 3 :(得分:0)

这听起来像是自定义助手的一个很好的用例。

http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs

答案 4 :(得分:0)

您可以使用以下内容从控制器返回Json对象:

[HttpPost]
public ActionResult YourFunction()
{
    return Json(new { stringContent = "Your String content here!" });
}

然后你可以从你的.cshtml做一个ajax调用:

$.ajax(
{
    url: '/YourController/YourFunction',
    type: 'POST',
    success: function (data) {
                $("#SomeElement").html(data.stringContent);
             },
             error: function () {
                 alert("error");
             }
});

建议不要在View中调用Controller中的方法,因为你打破了MVC模式!