【问题标题】:How to prevent HttpGet method being called?如何防止调用 HttpGet 方法?
【发布时间】:2022-11-26 15:20:23
【问题描述】:

所以我有一个常规方法和一个 HttpGet 方法:

    //Create a new note
    public ActionResult EditNote()
    {
        return View();
    }

    //Edit a selected note
    [HttpGet]
    public ActionResult EditNote(int id)
    {
        var model = NotesProcessor.LoadNote(id);
        return View(model);
    }

它们都使用相同的视图页面,但只有 HttpGet 方法会用详细信息填充页面,因为用户将在此处编辑现有注释。 所以第一种方法应该打开一个没有填充数据的页面。

我的问题是我不知道如何从我的视图页面调用非 HttpGet 方法,因为它会自动调用 HttpGet 方法并且页面会给我一个错误:

参数字典包含参数“id”的空条目

这就是我尝试调用常规方法的方式:(在添加另一个方法之前效果很好)

@Html.ActionLink("Create New", "EditNote")

这是针对 HttpGet 方法的:

@Html.ActionLink("Edit", "EditNote", new { id = Model.Id })

老实说,我认为它会检测到非重载语法并调用正确的方法,但事实并非如此。

我可以制作另一个视图页面来创建空白笔记,但这不是很“干”......

我应该怎么办?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您可以重命名不带参数的方法:

    //Create a new note
    public ActionResult CreateNote()
    {
        return View("EditNote");
    }
        
    //Edit a selected note
    [HttpGet]
    public ActionResult EditNote(int id)
    {
        var model = NotesProcessor.LoadNote(id);
        return View(model);
    }
    

    然后在你看来:

    @Html.ActionLink("Create New", "CreateNote")
    @Html.ActionLink("Create New", "EditNote", new { id = Model.Id })
    

    【讨论】:

      【解决方案2】:

      尝试使用不带参数的路由模板添加 HttpGetAttribute

      [HttpGet("[controller]/[action]")]
      public ActionResult EditNote()
      {
          return View();
      }
      

      但我认为值得考虑将EditNode()重命名为CreateNote()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-07
        • 1970-01-01
        • 2017-08-31
        • 1970-01-01
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        相关资源
        最近更新 更多