如何使两个控制器GET方法将数据发布到同一个POST方法

时间:2017-05-16 10:53:43

标签: c# asp.net asp.net-mvc

所以我试图让两个控制器方法将数据发布到相同的[HttpPost]方法,我无法弄明白。

所以我在我的控制器中有这个方法:

// GET: MpSwitches/Create
public ActionResult Create()
{
   return View();
}

这个方法:

public ActionResult FirstTimeStartupCreate()
{
    ViewBag.FirstTime =
    "Je bent doorgestuurd naar deze pagina omdat er nog geen MP-switches in de database staan.";
    return View("Create");
}

当按下提交按钮时,他们都应该将数据发布到此方法。

// POST: MpSwitches/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for 
// more details see https://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost, ActionName("FirstTimeStartupCreate")]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "IpAdress")] MpSwitch mpSwitch)
{
    if (ModelState.IsValid)
    {
        var mpSwitchMethods = new MpSwitch();
        if (mpSwitchMethods.CreateMpSwitch(mpSwitch, _db))
        {
            // Success
            return RedirectToAction("Index");
        }
        // Failed to insert into database
        return View("Create", mpSwitch);
    }

    // Form hasn't been filled in correctly.
    return View("Create",mpSwitch);
}

我添加了ActionName属性,因此FirstTimeStartupCreate将发布到此方法。但是现在Create方法不再发布到这个方法了。

有关如何解决此问题的任何提示?

1 个答案:

答案 0 :(得分:1)

我不认为FirstTimeStartupCreate符合你的想法。它不是定义回发如何工作的,它改变了该动作的名称,因此它不是方法名称,而是你在属性中所说的任何内容。

因此,这适用于FirstTimeStartupCreate的原因是GET版本POST到相同的操作名称,但您现在有一个专门针对名称为Create的POST的操作,因此它将使用该操作。您不再拥有名为Html.BeginForm的POST操作,以便无法正常工作。

执行所需操作的正确方法是在视图中定义表单,您需要告诉它应该发布哪个控制器/操作。 Html.BeginForm("Create", "MyController")documentationa lot of overloads

所以在这种情况下你会做let printPyramid = (n) => { if (n===0) { return false; } else { let arr = []; for(let i=0; i<n; i++) { arr.push(i); console.log(arr.toString()); } } }