【问题标题】:MVC Multiple Buttons ValidationMVC 多按钮验证
【发布时间】:2013-06-07 03:05:28
【问题描述】:

我在表单上有 4 个按钮,“提交 1”调用控制器 A,“提交 2”调用控制器 B。

我在同一个表单上也有“按钮 1”和“按钮 2”,我不希望对它们进行验证。

如何使“提交 1”和“提交 2”验证表单而不是“按钮 1”和“按钮 2”?

同时“按钮 1”和“按钮 2”应提交给不同的控制器。我如何做到这一点?

public class SampleForm
{
    [Display(Name = "FName: ")]
    [Required(ErrorMessage = "Enter FName")]
    public string FirstName { get; set; }

    [Display(Name = "LName: ")]
    [Required(ErrorMessage = "Enter LName")]
    public string LastName { get; set; }

    [Display(Name = "Bypassid: ")]
    [Required(ErrorMessage = "Enter Bypassid")]
    public string Bypassid { get; set; }    
}

@model SampleForm
@using (Html.BeginForm("SampleForm", "SampleController", FormMethod.Post, new { name = "frmSample", id = "frmSample" }))
{
    @Html.LabelFor(model => model.FirstName)
    @Html.TextBoxFor(model => model.FirstName)
    @Html.ValidationMessageFor(model => model.FirstName)

    @Html.LabelFor(model => model.LastName)
    @Html.TextBoxFor(model => model.LastName)
    @Html.ValidationMessageFor(model => model.LastName)

    @Html.LabelFor(model => model.Bypassid)
    @Html.TextBoxFor(model => model.Bypassid)
    @Html.ValidationMessageFor(model => model.Bypassid)

    <input type="submit" value="Submit 1" name="Command" />

    <input type="submit" value="Submit 2" name="Command" />

    <button type="button" name="Button 1" value="Button 1">Button 1</button>

    <button type="button" name="Button 2" value="Button 2">Button 2</button>
}

我希望“提交 1”和“提交 2”使用 DataAnnotations 验证表单,但是 当我单击“Button 1”时,我想确保“Bypassid”字段中有值并重定向到另一个控制器(比如 . 当我单击“按钮 2”时,我不会验证任何内容,只是重定向到另一个控制器。

【问题讨论】:

  • 这些按钮是在同一个表单上还是在不同表单上?你用过验证吗? jQuery 验证还是 DataAnnotations?
  • 我在同一个表单上拥有所有按钮。我正在使用 DataAnnotations 进行验证。
  • 能否请您提供您正在使用的确切 Html?谢谢!
  • 我用代码和详细信息更新了主要帖子/初始帖子。

标签: asp.net asp.net-mvc-3


【解决方案1】:

关于提交两个动作,你有两个提交按钮和独立值的正确想法。您可以使用操作中的值来破译您希望如何处理请求。尽管您在一天结束时只会提交一项操作,但您可以在操作中重定向它以处理流程的差异。例如

@using (Html.BeginForm("BasicAction"))
{
    @* controls *@
    <input type="submit" value="action1" name="command" />
    <input type="submit" value="action2" name="command" />
}

然后,你的控制器:

[HttpPost]
public ActionResult BasicAction(MyModel model, String command)
{
    if (ModelState.IsValid)
    {
        switch (command)
        {
            case "action1":
                return RedirectToAction("Action1", new { model = model });
            case "action2":
                return RedirectToAction("Action2", new { model = model });
        }
    }
    return View(model);
}

// handle action1
[NonAction]
public ActionResult Action1(MyModel model)
{
    // do whatever
}

[NonAction]
// handle action2
public ActionResult Action2(MyModel model)
{
    // do whatever
}

至于禁用验证,您可以在按钮 1 和 2 上设置 disableValidation=true,客户端验证将被忽略(我相信这是 MVC2 的版本)。为此,请在定义这些按钮后添加以下 javascript:

<script>
  // IDs of the buttons to be disabled
  var disabled = ['button1','button2'];
  for (var i = 0; i < disabled.length; i++){
      document.getElementById(disabled[i]).disableValidation = true;
  }
</script>

【讨论】:

  • 谢谢布拉德。在我的情况下,我不想禁用验证让我们说“按钮 1”,我希望“按钮 1”只验证 for 上的一个字段而不是三个。我也试图找到我的一面。再次感谢!
  • @CoolArchTek:在这种情况下,看看这个问题:stackoverflow.com/questions/7340751/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2013-02-10
  • 2016-12-07
  • 1970-01-01
  • 2016-11-16
  • 2014-10-12
相关资源
最近更新 更多