繁体   English   中英

从视图(cshtml)调用控制器中的方法

[英]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: { 
           } 
        }); 
  1. 类型可以是GETPOST具体取决于您的控制器方法类型。
  2. 在 URL 属性中传递了两个参数,第一个是控制器方法名称,第二个是控制器名称。
  3. 在数据属性中,您必须传递从视图中传入控制器所需的值,例如控制器方法中的参数。
  4. 在成功和错误属性中,您必须编写在两种情况下都应执行的代码块。 例如成功时在 UI 上显示数据,失败时显示错误消息。

不要这样做。 这是通往黑暗面的道路 :) 每个 JSON 请求都需要一些时间。

  1. 创建模型来存储您的员工
  2. 将其填充到控制器中(甚至在某些业务逻辑类中更好)
  3. 在您的视图中显示

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM