AMcoder - javascript, python, java, html, php, sql

Հնարավո՞ր է ASP.NET MVC 5 ViewModel-ում գույքը դարձնել զրոյական և միևնույն ժամանակ պահանջվող:

Ես ունեմ դիտման հետևյալ մոդելը

public class FormViewModel
{
    [Required]
    public DateTime? LocalFrom { get; set; }

    [Required]
    public DateTime? LocalTo { get; set; }
}

ապա վերահսկիչում ունեմ հետևյալ գործողությունը

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index([Bind(Include = "LocalFrom,LocalTo")] FormViewModel model)
{
    if (ModelState.IsValid)
    {
        var presenter = new ManagePresenter(model);
        return View(presenter);
    }
    return View(model); // here model.LocalFrom, model.LocalTo should be null
}

Ահա իմ HTML ձևը

<form class="form-horizontal" action="/Manage/Index" method="post">

    @Html.AntiForgeryToken()
    <div class="form-group">
        <label class="control-label col-sm-2" for="LocalFrom">From</label>
        <div class="col-sm-10">
            <input type="datetime" class="form-control" id="LocalFrom" name="LocalFrom" value="@Model.LocalFrom" required>
        </div>
    </div>

    <div class="form-group">
        <label class="control-label col-sm-2" for="LocalTo">To</label>
        <div class="col-sm-10">
            <input type="datetime" class="form-control" id="LocalTo" name="LocalTo" value="@Model.LocalTo)" required>
        </div>
    </div>

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-primary">Submit</button>
        </div>
    </div>

</form>

Վստահ չեմ, որ զրոյական հատկություն ստեղծելը տրամաբանական է, թե ոչ այստեղ: Ես հիմնականում ուզում եմ մուտքագրումը համալրել LocalFrom անունով blank-ով, երբ Model.LocalFrom-ը զրոյական է, կամ ճիշտ արժեքով, երբ Model.LocalFrom-ը զրոյական չէ:

Խնդիր

Այնուհետև ModelState.IsValid-ը միշտ վերադարձնում է false, նույնիսկ մենք բոլոր պահանջվող արժեքները առկա են և վավեր:

Երբ ես LocalFrom-ը և LocalTo-ը դարձնում եմ ոչ զրոյական, ModelState-ը դառնում է վավեր: բայց տեսադաշտում կցուցադրվի ժամանակի սկզբի ժամանակը նման կերպ

մուտքագրեք պատկերի նկարագրությունը այստեղ

Ինչպե՞ս կարող եմ զրոյական արժեք փոխանցել դիտմանը և ստիպել ModelState-ին ճիշտ վավերացնել:


  • Սրանք կարող են օգնել ձեզ՝ stackoverflow.com/a/39094061/2912943 և stackoverflow.com/questions/12048838/ 13.09.2016
  • @JeffGuillaume Ես արդեն ունեմ իմ DateTime հատկությունը չեղյալ համարելու: բայց խնդիրը ModelState-ն է: IsValid-ը միշտ կեղծ է 13.09.2016
  • Ես խմբագրեցի իմ մեկնաբանությունը վերևում, որպեսզի ավելացնեմ մեկ այլ հղում, դուք էլ ստուգե՞լ եք այդ մեկը: 13.09.2016
  • Ես չեմ կարող կրկնօրինակել ձեր խնդիրը տեղական կամ dotNetFiddle-ում: Թվում է, թե լավ է աշխատում ջութակի մեջ, բացառությամբ, որ դուք պետք է օգտագործեք DisplayFormat-ը, ինչպես առաջարկում է @JeffGuillaume-ն իր առաջին հղումում: 13.09.2016
  • փորձեք ջնջել required տեսադաշտում: 14.09.2016

Պատասխանները:


1

Եթե ​​ցանկանում եք թույլատրել null արժեքները, ապա դուք պետք է հեռացնեք [Required] հատկանիշը ձեր DateTime հատկություններից: [Required] հատկանիշը նշանակում է, որ արժեքը չի կարող լինել null, այնպես որ, եթե դուք դատարկ արժեք ներկայացնեք (null), ապա ModelState-ն անվավեր կլինի:

Հատկանիշների հեռացումը նշանակում է, որ վավեր ամսաթիվ կամ null ներկայացնելը վավեր կլինի, բայց անվավեր ամսաթիվ ներկայացնելը դեռևս կհանգեցնի նրան, որ ModelStateը անվավեր է:

Բացի այդ, դուք ստեղծում եք ձեր html-ը ձեռքով, և արդյունքում չեք ստանում ճիշտ երկկողմանի մոդելի կապում (այդ պատճառով դիտումը վերադարձնելիս տեսնում եք DateTime-ի լռելյայն արժեքը): Ձեր տեսակետը պետք է լինի

<div class="form-group">
    @Html.LabelFor(m => m.LocalFrom, new { @class="control-label col-sm-2" }) // assumes you add [Display(Name = "From")] to the property
    <div class="col-sm-10">
        @Html.TextBoxFor(m => m.LocalFrom)
        @Html.ValidationMessageFor(m => m.LocalFrom)
    </div>
</div>

Որպես կողմնակի նշում, դուք պետք է հեռացնեք անհարկի [Bind] հատկանիշը: Դուք օգտագործում եք դիտման մոդել, ինչը նշանակում է, որ դուք արդեն պաշտպանված եք ավելորդ հրապարակման հարձակումներից:

Վերջապես, ներառեք jquery.validate.js և jquery.validate.unobtrusive.js սկրիպտները ձեր տեսադաշտում, որպեսզի ստանաք հաճախորդի կողմից վավերացում, որը համապատասխանում է ձեր սերվերի կողմից վավերացման ատրիբուտներին, և համապատասխան սխալի հաղորդագրությունը ցուցադրվի տեսքում:

13.09.2016
  • Ես հարց ունեմ ձեր գրառման վերաբերյալ jQuery գրադարանների վերաբերյալ: Արդյո՞ք Microsoft-ն օգտագործում է jquery-ի վավերացման այս փլագինը jqueryvalidation.org: թե՞ նրանք ունեն իրենց սեփականը: Բացի այդ, ինչի՞ համար է jquery.validate.unobtrusive.js-ը կամ ինչի՞ համար է այն ինձ համար: 14.09.2016
  • Հաճախորդի կողմից վավերացման համար պահանջվող սկրիպտներն են jquery-{version}.js, jquery.validate.js և jquery.validate.unobtrusive.js: Երբ դուք կիրառում եք վավերացման հատկանիշ, որն իրականացնում է IClientValidatable-ը (օրինակ՝ [Required] հատկանիշը), HtmlHelper մեթոդները մուտքագրման համար կցուցադրեն data-val-* ատրիբուտների շարք: Երբ էջը ներկայացվում է, jquery.validate.unobtrusive.js-ը կարդում է այդ ատրիբուտները և ավելացնում կանոններ jquery.validate.js-ին, որն իր հերթին ստուգում է մուտքերի արժեքները և ցուցադրում է սխալի հաղորդագրություններ, եթե դրանք վավեր չեն: 15.09.2016
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..