[英]Call Method in Controller from View(cshtml)
嗨,我试图从控制器调用一个方法,只是为了显示“staff_name”
控制器
public JsonResult getStaffName(int staff_id)
{
var staffname = (from a in db.master_staff where b.staff_id == staff_id
select a.staff_name).SingleOrDefault();
return Json(staffname,JsonRequestBehavior.AllowGet);
}
看法
int[] staff_id = { 24,25,26 };
@foreach (var n in staff_id){
//call method getStaffName from Controller to get "staff_name"
}
它假设根据“staff_id”获取“staff_name”
这种情况有什么可能的方法吗?
要从控制器调用方法以查看您必须从视图中使用 ajax 调用。 这是 asp.net mvc 中的 ajax 调用语法:
$.ajax({
type: "GET",
url: '@Url.Action("controller method name", "controller name")',
data: { searchText: value },
contentType: "application/json; charset=utf-8",
dataType: 'json',
success: function (result) {
},
error: {
}
});
GET
或POST
具体取决于您的控制器方法类型。不要这样做。 这是通往黑暗面的道路 :) 每个 JSON 请求都需要一些时间。
在您的视图中显示
public ActionResult Staff() { // This would be nice to have as separate Data Access Layery class var staffs = GetStaffs(); return View(staffs); } private static StaffDto[] GetStaffs() { // One call to database is better that several var staffs = db.master_staff .Where(x => x.staff_id > 0) // Any other condition, if needed .Select(x => new StaffDto(x.staff_id, x.staff_name)) .ToArray(); return staffs; } // Data Transfer Object class to separate database from presentation view public class StaffDto { public int StaffId { get; set; } public string Name { get; set; } public StaffDto(int staffId, string name) { StaffId = staffId; Name = name; } }
你的视图文件(在我的例子中是 Staff.cshtml)
@model IEnumerable<TestMvc.Controllers.StaffDto>
<div>
@foreach (var staff in Model)
{
@staff.Name<br />
}
</div>
而且,作为奖励,您可以轻松对其进行单元测试
private readonly HomeController _homeController = new HomeController();
[TestMethod]
public void Staff_CheckCount()
{
var result = _homeController.Staff();
Assert.IsInstanceOfType(result, typeof(ViewResult));
var actual = ((ViewResult)result).Model as StaffDto[];
Assert.IsNotNull(actual);
Assert.AreEqual(3, actual.Length);
}
你可以这样做:
@Html.Action("getStaffName", "YourController", staff_id)
有关更多信息,请查看子操作: https : //haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx/
但是,我不知道您要通过此实现什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.