我想在视图中调用非动作方法。我能这样做吗?换句话说,我的控制器中有一个返回字符串的方法。我想在我的视图(.cshtml)中调用该方法并在视图中显示它。我只能看到,方法应该返回一个ActionResult。但在我的情况下,我不需要返回一个字符串的视图。
答案 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()
将查看/部分视图返回到其他视图我个人从未需要从不是ActionResult
,as 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模式!