MVC not validate empty string

2019-04-21 07:57发布

问题:

I have razor file where I define html form with text box for string:

    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
        <legend>Product</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
        </fieldset>
     }

The problem is, that I want this field (model.name) not to be nullable, but razor validation allows string to be empty, when I add empty string to model it gives error. Any suggestions how to validate simply this string not to be empty anymore?

回答1:

You probably need to set the DataAnnotation attribute

[Required(AllowEmptyStrings = false)]

on top of your property where you want to apply the validation.
Look at this question here
RequiredAttribute with AllowEmptyString=true in ASP.NET MVC 3 unobtrusive validation

Similar problem, more or less here.
How to convert TextBoxes with null values to empty strings

Hopefully, you'll be able to solve your problem



回答2:

what does your viewmodel look like?

You can add a DataAnnotation attribute to your Name property in your viewmodel:

public class MyViewModel
{
    [Required(ErrorMessage="This field can not be empty.")]
    public string Name { get; set; }
}

Then, in your controller you can check whether or not the model being posted is valid.

public ActionResult MyAction(ViewModel model)
{
    if (ModelState.IsValid)
    {
        //ok
    }
    else
    {
        //not ok
    }
}


回答3:

That what worked for me:
use the following line to not accept empty string
[Required (AllowEmptyStrings = false)]
and that one to not allowing white space
[RegularExpression (@".\S+.", ErrorMessage = "No white space allowed")]