C# 如何验证字段不为空

C# 如何验证字段不为空,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我的视图为abcd.cshtml,包含以下代码 @using (Html.BeginForm()) { @Html.ValidationSummary(true) @Html.HiddenFor(model => model.id) @Html.HiddenFor(model => model.createtime) &

我的视图为abcd.cshtml,包含以下代码

 @using (Html.BeginForm())
            {                
                @Html.ValidationSummary(true)

            @Html.HiddenFor(model => model.id)
            @Html.HiddenFor(model => model.createtime)

            <h3>Headline</h3>
            <div class="editor-field">
                @Html.EditorFor(model => model.general)
                @Html.ValidationMessageFor(model => model.general)
            </div>
            <a class="anchor" id="keywords"></a>
            <h3>Keywords</h3>
            <div class="editor-field">
                @Html.EditorFor(model => model.keywords)
                @Html.ValidationMessageFor(model => model.keywords)
            </div>
            <a class="anchor" id="relatedcq"></a>
            <h3>Related CQ</h3>
            <div class="editor-field">
                @Html.EditorFor(model => model.relatedcq)
                @Html.ValidationMessageFor(model => model.relatedcq)
            </div>
            <p>
                <input type="submit" value="Create" class="btn btn-primary" />
            </p>

        }

    </div>
我想要的是确保关键字已填充。如果关键字已填写,我需要有一个弹出窗口,说“请填写关键字”。
我试着用MessageBox.Show()来做这件事,但后来我不得不添加System.Windows.Forms,这与System.Web.Mvc有一些冲突

如果您使用的是htmlhelper ValidationMessageFor,您是否愿意向用户显示验证摘要,并向用户显示您需要填写的所有字段

e、 g。 如果您有一个模型,并且有多个字段需要归档,可以通过使用
[必需]
属性或任何其他您认为合适的属性(例如
[StringLength]
等)装饰这些字段/属性来验证

如果你这样做了,你可以提供一个验证摘要,如果你的数据不符合设置的验证,使用模型绑定器不发布你的数据。 验证摘要示例:

@Html.ValidationSummary(false, "Please provide the details above and then click submit.")
上面将显示所有字段的所有验证错误,这些字段标记有以下内容,例如
@Html.ValidationMessageFor(model=>model.relatedcq)

如果存在验证错误,将如何显示输出的图像。
希望这有帮助:)

要实现这一点,您需要在服务器端创建自定义验证属性。例如,让我们把它命名为MustBeFilled。您的新属性如下所示:

public class MustBeFilledAttribute : ValidationAttribute, IClientValidatable // IClientValidatable for client side Validation
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value == null)
        {
            return new ValidationResult(FormatErrorMessage(null));
        }

        return ValidationResult.Success;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var modelClientValidationRule = new ModelClientValidationRule
        {
            ValidationType = "mustbefilled",
            ErrorMessage = ErrorMessage //Added
        };

        modelClientValidationRule.ValidationParameters.Add("param", metadata.DisplayName); //Added
        return new List<ModelClientValidationRule> { modelClientValidationRule };
    }
}
要应用此自定义验证,请首先在模型属性上添加属性

[MustBeFilled]
public string Keywords { get; set; }
然后将自定义javascript添加到bundle.config,前提是您将代码保存在名为
mustbefilled.js
的单独文件中。在这里,我特意添加了带有验证插件的javascript文件,以便在验证插件之前呈现时不会出现异常

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.validate*",
                  "~/Scripts/mustbefilled.js"));
就这样,你们都准备好了


现在,您所要做的就是创建一个模型pop,并在
mustbefilled.js
中调用它,我将注释放在此处调用它。请参阅这篇文章,它将帮助您创建一个绑定到keywords属性的模式弹出窗口

您可能只需要在回发到控制器之前执行一些自定义javascript。或者您可以使用客户端验证并将
关键字
设置为必填字段。这就是“让框架为您处理”的方式您的模型是什么样子的?
MessageBox.Show()
将在服务器端而不是浏览器上执行。您需要编写一个自定义验证规则,并将其应用于模型。验证失败时,您可以采取自定义操作,例如使用JQuery显示模式弹出窗口。为什么不使用内置的
[必需]
属性?Hmm可能是!!如果允许为所需属性自定义客户端脚本。是的,它应该做的技巧让我试试。我知道abt需要attrib bt,问题是让我兴奋的是做一些比jst显示消息更重要的事情。这就是为什么我对寻找一个愚蠢的bt感兴趣,对这个问题感兴趣。U knw no ques是愚蠢的。根据我从一些论坛得到的一些建议,添加[Required]是我尝试的第一件事,但在调用db.SaveChanges()时,它总是抛出错误。我应该在代码中的什么位置添加ValidationSummary?在cshtml文件本身或控制器中?如果它在db.savechanges处崩溃,那么您是否检查了引发的异常?您是否已在节中通过断点检查该值。如果您有验证集,并且表单不满足验证的要求,它将不会发布。添加必填字段,并将验证摘要放在“提交”按钮之后,以详细说明所有错误。另外,您可能希望添加一些有意义的注释,说明其验证失败的原因。好的,我想我通过添加ModelState部分完成了这一点。Valid允许我提交,它会在关键字框旁边打印错误消息。现在可以帮助我如何使相关框变为“红色”和*字段,如您的示例中所示吗?这是通过CSS完成的。将此css添加到您的css文件中,并在视图中引用该css文件。我添加了一些评论。也许点击“接受答案”/*html验证帮助程序的样式*/.字段验证错误{color:#ff0000;font-weight:bold;}.字段验证有效{display:none;}/*带红色边框的文本框输入*/input.input-validation-error{border:1px solid#ac2828;}/*带红色边框的文本区域输入*/intput[type=text],textarea.input-validation-error{边框:1px实心#ac2828;}。验证摘要错误{颜色:红色;字体重量:粗体;}
[MustBeFilled]
public string Keywords { get; set; }
        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.validate*",
                  "~/Scripts/mustbefilled.js"));