如何在视图中引用控制器方法中的自定义帮助器

时间:2016-05-14 16:52:56

标签: asp.net-mvc-5

我在App_Code中创建了一个名为ControlHelper的网格助手,它运行得很好。我使用输入呈现表单和表格,并有按钮将所有信息提交回我选择的方法。

enter image description here

我可以说每次处理从这个网格提交的控制器代码都是一样的,所以我在我的帮助器上添加了一个名为Submit()的方法来重用该代码。

我可以使用

成功调用helper方法从我的视图中呈现网格
@ControlHelper.Grid(Html, Model, "About", "Home")

但是当我尝试从我的控制器代码中调用ControlHelper.Submit()时,它表示我的助手未定义。

  

名称' ControlHelper'在当前上下文中不存在

这是帮助者代码的相关部分:

@using System.Web.Mvc;
@using System.Web.Mvc.Html;
@using male.services.biz

@functions
{
  public static HelperResult Grid<TModel, T>(HtmlHelper<TModel> html,
    EFCollection<T> collection,
    string action,
    string controller,
    FormMethod method = FormMethod.Post,
    string formName = null) where T : EFObject<T>
  {
    formName = formName ?? "frm" + typeof(T).Name + "s";
    return RenderGrid(html, typeof(T), collection, action, controller, method, formName);
  }

  public static void Submit<T>(EFCollection<T> collection, string save, string add, string delete) where T : EFObject<T>
  {
    if (add == null)
      collection.Remove(collection.Last());

    if (delete != null)
    {
      var itemToDelete = collection[int.Parse(delete)];
      collection.Remove(itemToDelete);
      itemToDelete.Delete();
    }
    if (add != null || delete != null || save != null)
      collection.Save();
  }
}

我的控制器代码目前是:

[HttpPost]
public ActionResult About(EFCollection<Member> members, string save, string add, string delete)
{

  if (add == null)
    members.Remove(members.Last());

  if (delete != null)
  {
    var memberToDelete = members[int.Parse(delete)];
    members.Remove(memberToDelete);
    memberToDelete.Delete();
  }
  if (add != null || delete != null || save != null)
    members.Save();
  return View(members);
}

但是看看我是否可以让它工作,它将简化为:

[HttpPost]
public ActionResult About(EFCollection<Member> members, string save, string add, string delete)
{
  ControlHelper.Submit(members, save, add, delete);
  return View(members);
}

1 个答案:

答案 0 :(得分:0)

答案是,我不再这样做了。我对某些类型和类使用共享编辑/显示视图来实现我想要的。