如何在Controller中创建两个Action Results,形成相同的视图MVC?

时间:2015-08-13 16:54:24

标签: asp.net-mvc-4 razor

我想在我的视图中有两个按钮(称为Create),一个提交表单并将用户带回主页(如果已完成)和一个提交表单但重新加载评级页面以便能够添加额外的评级。

以下是我现在遇到的问题 -

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

假设您有这两个按钮:

<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
}

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

答案 1 :(得分:0)

如何使用

的示例

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();
        }

答案 2 :(得分:0)

在你的html中,两个按钮都是相同的名称&#39;属性,但分配两个不同的值。

<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