【问题标题】:How to create two Action Results in Controller form the same view MVC?如何在控制器中创建两个动作结果形成同一个视图 MVC?
【发布时间】:2015-08-13 16:54:23
【问题描述】:

我想在我的视图中有两个按钮(称为“创建”),一个用于提交表单并在用户完成后将其带回主页,另一个用于提交表单但重新加载评分页面以便能够添加其他评分。

这是我现在遇到的问题-

目前我有一个按钮在我的控制器中有一个动作结果:

public ActionResult Create(Rating rating) 
{
        if (ModelState.IsValid)
        {
            db.Ratings.Add(rating);
            db.SaveChanges();

            return RedirectToAction("Index");
        }
    **Additional code that is irrelevant here
}

我面临的问题是这个 ActionResult 有一个重定向到主页,所以当我提交我的另一个按钮并使用同一个 ActionResult 类时,它被重定向到主页。当单击按钮并提交表单时,我在视图中使用 javascript onclick 事件重定向到 Ratings 页面,但是如果我对两个按钮使用相同的 Action Result 类,它会重定向我想让我留在页面上的按钮到索引页。

如何从同一个视图创建两个 Action Result 类,每个提交按钮一个?

【问题讨论】:

    标签: asp.net-mvc-4 razor


    【解决方案1】:

    那么,你如何确定用户想要做什么?

    两个按钮都提交表单,因此它们也可以使用相同的操作。但是你需要以某种方式区分。你可以用按钮来做到这一点。

    假设你有这两个按钮:

    <input type="submit" name="redirect" value="true" />
    <input type="submit" name="redirect" value="false" />
    

    然后你可以在你的动作方法中绑定它:

    public ActionResult Create(Rating rating, bool redirect)
    {
        // other logic
    
        if (redirect)
            return RedirectToAction("Index");
        else
            return View(rating);
    }
    

    如果您有两个以上的可能选项,那么您可以使用字符串而不是布尔值。比如:

    <input type="submit" name="action" value="redirect" />
    <input type="submit" name="action" value="reload" />
    

    然后在控制器中:

    public ActionResult Create(Rating rating, string action)
    {
        // other logic
    
        if (action.Equals("redirect"))
            return RedirectToAction("Index");
        else if (action.Equals("reload"))
            return View(rating);
        else if //...
            //... and so on
    }
    

    关键是客户端代码需要以某种方式告诉服务器端代码该做什么。包括在表单提交本身中,使表单提交具有自描述性,并允许服务器端代码轻松处理。

    【讨论】:

      【解决方案2】:

      使用示例

      HTML,内部表单:

      <button type="submit" name="TaskSubmitAction" value="ActionReject" class="btn btn-danger pull-left">Reject</button>
      <button type="submit" name="TaskSubmitAction" value="ActionSubmit" class="btn btn-success">Accept</button>
      

      控制器:

          public ActionResult TaskSubmit(int? id, string TaskSubmitAction)
          {
              switch (TaskSubmitAction)
              {
                  case "ActionSubmit":
      
                      break;
                  case "ActionReject":
      
                      break;
                  default: throw new Exception();
              }
      

      【讨论】:

        【解决方案3】:

        在您的 html 中,为两个按钮提供相同的“名称”属性,但分配两个不同的值。

        <button name="submitBtn" value="valueX"> Button 1 </button>
        <button name="submitBtn" value="valueY"> Button 2 </button>
        

        在您的服务器端代码中获取输入按钮的值并根据该值执行不同的操作

        String choice = request.getParamter("submitBtn");
        if(choice.equals("valueX"))
            //do something
        else if(choice.equals("valueY"))
            //do something else
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-30
          • 2016-10-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多