Kote
Kote

Reputation: 723

MVC not validate empty string

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?

Upvotes: 10

Views: 35550

Answers (3)

Flowra
Flowra

Reputation: 1408

This is what worked for me:
Use the following line to not accept empty string

[Required (AllowEmptyStrings = false)]

and this one to not allow white space

[RegularExpression (@".*\S+.*", ErrorMessage = "No white space allowed")]

Upvotes: 0

sohaiby
sohaiby

Reputation: 1198

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

Upvotes: 23

Thousand
Thousand

Reputation: 6638

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
    }
}

Upvotes: 5

Related Questions