MVC3 үлгісін тексеру үшін шын немесе жалған шығу әдісі

Ақпаратты жіберу үшін пішінді пайдаланамын және менің үлгіімде оған енгізілген тексеру бар. Мен өрістерді төмендегілердің кез келгенін қолдана отырып тексере алатынымды білемін:

@Html.ValidationSummary() //To validate all fields

@Html.ValidationMessageFor(x => x.FirstName) //To validate single field

Бұл екі әдіс тек HTML тізімін (ValidationSummary үшін) немесе аралықты (ValidateionMessageFor) қайтарады.

Мен не істеуді қалаймын, егер өріс жарамды болса немесе болмаса (немесе нөл болмаса), шын мәнісінде немесе жалған сөйлемді алсам, енгізуді қамтитын ұяшыққа немесе тіпті жапсырмаға арналған кейбір таңдамалы сәндеуді жасай аламын.

Does anyone know if there is such a code that will do this, like @Html.IsValid(x => x.FirstName)

Міне, менің үлгіім мен көзқарасым. Модель дұрыс түрде түсіп, дұрыс тексерілсе, бұл тек HTML жолының орнына логикалық мәнді аламын ба, жоқ па деген мәселе.

МОДЕЛЬ:

using System.ComponentModel.DataAnnotations;

namespace X.Web.Helpers
{
    public class RequestSamplesModel
    {
        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }

        public string Email { get; set; }
        [Required]
        public string Line1 { get; set; }
        [Required]
        public string Line2 { get; set; }
        [Required]
        public string City { get; set; }
        [Required]
        public string Postcode { get; set; }
        [Required]
        public string Country { get; set; }
    }
}

VIEW:

@{
    Layout = "~/Views/Shared/_PlainLayout.cshtml";
}
@using X.Web.Helpers
@model RequestSamplesModel

<form action="/Site/RequestSamples" method="POST">
    <div class="form-item">
        First Name:@Html.TextBoxFor(x => x.FirstName)</div>
    <div class="form-item">
        Last Name:@Html.TextBoxFor(x => x.LastName)</div>
    <div class="form-item">
        Email:@Html.TextBoxFor(x => x.Email)</div>
    <div class="form-item">
        Address 1:@Html.TextBoxFor(x => x.Line1)</div>
    <div class="form-item">
        Address 2:@Html.TextBoxFor(x => x.Line2)</div>
    <div class="form-item">
        City:@Html.TextBoxFor(x => x.City)</div>
    <div class="form-item">
        Postcode:@Html.TextBoxFor(x => x.Postcode)</div>
    <div class="form-item">
        Country:@Html.TextBoxFor(x => x.Country)</div>
    <div class="form-item">
        <input class="submit-button" type="image" src="/_content/images/email-submit.gif" /></div>
</form>
0

1 жауаптар

Does anyone know if there is such a code that will do this, like @Html.IsValid(x => x.FirstName)

Жоқ, кірістірілген код жоқ. Бірақ біреуін жазудың маңызы болмас үшін енді:

public static class HtmlExtensions
{
    public static bool IsValid(
        this HtmlHelper htmlHelper, 
        Expression> expression
    )
    {
        var modelState = htmlHelper.ViewData.ModelState;
        var name = ExpressionHelper.GetExpressionText(expression);
        var key = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
        ModelState value;
        return !modelState.TryGetValue(key, out value) || 
               value.Errors.Count == 0;
    }
}

Енді сіздің көзқарастарыңызда кеңейтілім әдісін тек ауқымға келтіріңіз және:

@if (Html.IsValid(x => x.FirstName))
{
    @:<div>Super, the first name is valid</div>
}
3
қосылды
@JakeJ, кірістірілген көруді қалауыңыз мүмкін кейбір мүмкіндіктердің не екенін түсіну үшін мына блог блогын оқып шығыңыз: blogs.msdn.com/b/ericlippert/archive/2003/10/28/53298.aspx
қосылды автор Darin Dimitrov, көзі
Бұл керемет, шабуылға рахмет. Бұл өте аз пайдаланылады. Сөйтсе де оған кіретін функция жоқ сияқты: /
қосылды автор JakeJ, көзі
Осыған рахмет, бұл өте қызықты мақала. Бұл қолданылатын біржолғы нәрседен аз болса да, бұл мен әрдайым қызықтыратын және пайдаланғым келетін нәрсе, бірақ оның орнына көп жұмыс істегендіктен, уақытша жұмыс жасау керек. Бірақ кез-келген жолы, бұл үзінді маған болашақта көп уақытты үнемдейді, қайтадан рахмет.
қосылды автор JakeJ, көзі