【问题标题】:Use remote validation in ASP. Net MVC Application Create and edit view [duplicate]在 ASP 中使用远程验证。 Net MVC 应用程序创建和编辑视图 [重复]
【发布时间】:2017-07-17 18:46:03
【问题描述】:

在插入数据库之前,我需要验证一个输入是否唯一。我在模型类中使用了远程验证属性。

[Required(ErrorMessage = "Package name Required")]
[Remote("IsNameAvailble", "Package", ErrorMessage = "Sorry!!! This name have entered for another package")]
public string packagename { get; set; }

查看

<div class="form-group">
<label class="control-label">Package Name</label>
 @Html.TextBoxFor(model => model.package_name, new { @class = "form-control", placeholder = "Name for the Package", type = "text", autofocus = "autofocus", id = "packagename" })
@Html.ValidationMessageFor(model => model.package_name)
</div>

这是控制器代码

 public ActionResult IsNameAvailble(string package_name)
        {
            Dbfile db = new Dbfile ();
            var exist= db.GetAllList().FirstOrDefault(m => m.package_name == package_name);
            if (exist!= null)
            {
                return Json(false, JsonRequestBehavior.AllowGet);
            }
            else
            {
                return Json(true, JsonRequestBehavior.AllowGet);
            }
        }

这在添加新名称时效果很好 但是在编辑部分,如果我们更改其他值(除了包名,它会检查并显示错误消息)

所以我需要一种方法来使用选定的 id 检查它(如果我们使用选定的 id 进行检查,那么创建函数将不起作用)

请任何人提出答案

提前致谢

【问题讨论】:

  • 问题不是那么清楚。您需要一种方法来使用选定的 ID 检查“它”。请使用完整的句子。只是在这里猜测...当您进行编辑时,将 Id 传递到视图中,然后在提交时从视图中获取 id。使用db.Find(id) 检查条目是否存在。
  • 您需要使用[Remote] 属性的AdditionalFields 属性也将ID 值传递给rhe 方法,以便您可以从查询中排除当前对象。
  • @StephenMuecke AdditionalFields 属性是如何使用的,假设它是一封电子邮件,你能快速描述一下或给我一个参考点来实现它
  • 骗子解释了。

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


【解决方案1】:

第 1 步:- 在远程属性中添加 AdditionalFields

[Remote("IsNameAvailble", "Package", AdditionalFields = "id", ErrorMessage = "Sorry!!! This name have entered for another package")]
public string packagename { get; set; }

第 2 步:- 在 IsNameAvailble 方法中传递 id 参数并添加条件,通过该条件我们可以检查 id 是否大于零,然后 lamda 表达式应该检查带有 id 和 name 的记录,否则只需检查 name。

public ActionResult IsNameAvailble(string package_name,int id=0)
        {
            Dbfile db = new Dbfile ();
            var exist= db.GetAllList().FirstOrDefault(m => m.package_name == package_name);
            if (exist!= null)
            {
                return Json(false, JsonRequestBehavior.AllowGet);
            }
            else
            {
                return Json(true, JsonRequestBehavior.AllowGet);
            }
        }

【讨论】:

  • 这个id是怎么用的?
  • @UmarAftab 如果您创建记录,那么将变为 0,对于编辑模式,传递实际并为您的 lamda 表达式添加逻辑。
【解决方案2】:

要完成此操作,您需要通过以下方式更改您的 Remote Attribute

[Remote("IsNameAvailble", "Package", HttpMethod = "POST", AdditionalFields = nameof(PackageId), ErrorMessage = "Sorry!!! This name have entered for another package.")]

您还需要使用以下方法更改您的方法签名:

public ActionResult IsNameAvailble(YourModel modelData)
{
    // You can access PackageName and PackageId by modelData.PackageName and 
    // model.PackageId
    // Also you can check if Id already exist

}

这样你就可以解决你的编辑视图问题了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多