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