在特定提交按钮上激活[必需]ASP.NET MVC 4

本文关键字:必需 ASP NET MVC 激活 提交 按钮 | 更新日期: 2023-09-27 18:04:25

型号

namespace Maintenance_.Models
{
    public class IndexModel
    {
        [Required(ErrorMessage = "*")]
        public string ID { get; set; }
        [Required(ErrorMessage = "*")]        
        public string firstName { get; set; }
    }
}

在我的视图中,我有三个提交类型按钮(搜索、保存和更新(,我的问题是,当我单击搜索按钮时,[必需(ErrorMessage="所需信息"(]将处于活动状态。是否有代码可以使我的必需仅在保存更新按钮被单击时才处于活动状态?

编辑

查看

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    //Some codes...
    <button type="submit" id="search" name="SubmitButton" value="search" class="btn btn-default"><i class="fa fa-search"></i></button> 
    //Some codes
    <button name="SubmitButton" value="update" id="update" type="submit" style = "float:right;margin-right:10px; border-radius:5px;" class="btn btn-default" @ViewBag.disableUpdate><i class='fa fa-edit fa-fw'></i>Update</button>
    <button name="SubmitButton" value="save" id="save" type="submit" style = "float:right;margin-right:10px; border-radius:5px;" class="btn btn-default" disabled><i class='fa fa-save fa-fw'></i>Save</button>
}

在特定提交按钮上激活[必需]ASP.NET MVC 4

我认为对于搜索操作,您不需要任何提交按钮,而普通按钮

使用按钮并应用button click事件来执行搜索操作

这将确保您的验证器只有在点击更新和保存按钮时才能工作

基本上,这可以通过JQuery实现:示例:

$("document").ready(function () {
    $("#MyForm").valid({
         ...do Something
    });
});

$.validator.unobtrusive.parse("#MyForm");

或动作部分

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,Title,ReleaseDate,Genre,Price,Rating")] MyModel obj)
{
    if (ModelState.IsValid)
    {
        db.MyModel.Add(obj);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(obj);
}

我不认为有DataAttributes可以使不引人注目的验证以这种方式进行,但您可以在提交时使用javascript手动禁用验证,例如:

$("#search").click(function (e) {
    var $this = $(this),
        $form = $this.closest('form');
    e.preventDefault();
    // "hack" to disable validation on submit
    $form.validate().cancelSubmit = true;
    $form.submit();
})

编辑:

将表单拆分为两个不同的表单可能会更好:

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    //Fields you want to post in for search
    <button type="submit" id="search" name="SubmitButton" value="search" class="btn btn-default"><i class="fa fa-search"></i></button> 
}
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{    
    //Fields you want to post in for insert/update
    <button name="SubmitButton" value="update" id="update" type="submit" class="btn btn-default" @ViewBag.disableUpdate><i class='fa fa-edit fa-fw'></i>Update</button>
    <button name="SubmitButton" value="save" id="save" type="submit" class="btn btn-default" disabled><i class='fa fa-save fa-fw'></i>Save</button>
}

此外,由于搜索和插入/更新是根本不同的操作,因此为这两个操作创建不同的控制器操作是有意义的。