3

我想在视图中调用非操作方法。我可以这样做吗?换句话说,我的控制器中有一个返回字符串的方法。我想在我的视图(.cshtml)中调用该方法并将其显示在视图中。我只能看到,这些方法应该返回一个 ActionResult。但就我而言,我不需要只返回一个字符串的视图。

4

5 回答 5

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*@

希望有帮助!

于 2013-09-19T00:35:58.570 回答
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
于 2013-09-18T23:24:48.653 回答
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");
             }
});

不建议从您的视图中调用控制器中的方法,因为您正在破坏 MVC 模式!

于 2013-09-19T00:19:35.187 回答
0

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

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

于 2013-09-18T23:55:13.660 回答
0

您可以通过调用Html.Action() 或 Html.RenderAction()将 View/Partial 视图返回到其他视图

我个人从来不需要从不是ActionResult.

于 2013-09-18T23:29:01.090 回答