मैं एक MVC3 दृश्य मॉडल के रूप में परिभाषित किया है:फ़्लुएंट सत्यापन का उपयोग करके सूची में प्रत्येक स्ट्रिंग के विरुद्ध आप कैसे मान्य करते हैं?
public class AccountsValidator : AbstractValidator<AccountViewModel>
{
public AccountsValidator()
{
RuleFor(x => x.Accounts).SetCollectionValidator(new AccountValidator()); //This won't work
}
}
और खाता सत्यापन संभवतः परिभाषित किया जाएगा:
[Validator(typeof(AccountsValidator))]
public class AccountViewModel
{
public List<string> Accounts { get; set; }
}
सत्यापन की सहायता से के रूप में FluentValidation (v3.3.1.0) का उपयोग कर परिभाषित
public class AccountValidator : AbstractValidator<string> {
public OrderValidator() {
RuleFor(x => x).NotNull();
//any other validation here
}
}
मैं सूची में प्रत्येक खाते को documentation में वर्णित अनुसार वैल्यूएटेड होना चाहता हूं। हालांकि, SetCollectionValidator
पर कॉल काम नहीं करता है क्योंकि List<string>
का उपयोग करते समय यह कोई विकल्प नहीं है, हालांकि विकल्प वहां होगा यदि इसे List<Account>
के रूप में परिभाषित किया गया था। क्या मैं कुछ भूल रहा हूँ? मैं List<Account>
का उपयोग करने के लिए अपना मॉडल बदल सकता हूं और फिर खाता वर्ग परिभाषित कर सकता हूं लेकिन मैं वास्तव में सत्यापन के अनुरूप अपना मॉडल बदलना नहीं चाहता हूं।
@model MvcApplication9.Models.AccountViewModel
@using (Html.BeginForm())
{
@*The first account number is a required field.*@
<li>Account number* @Html.EditorFor(m => m.Accounts[0].Account) @Html.ValidationMessageFor(m => m.Accounts[0].Account)</li>
for (int i = 1; i < Model.Accounts.Count; i++)
{
<li>Account number @Html.EditorFor(m => m.Accounts[i].Account) @Html.ValidationMessageFor(m => m.Accounts[i].Account)</li>
}
<input type="submit" value="Add more..." name="add"/>
<input type="submit" value="Continue" name="next"/>
}
धन्यवाद, SetCollectionValidator ने काम किया था। मुझे पूरा यकीन नहीं है कि यह कथन पहले क्यों उपलब्ध नहीं था! हालांकि, यह अभी भी काफी सही काम नहीं कर रहा है। सत्यापन का उपयोग किया जा रहा है लेकिन किसी भी त्रुटि को अब "राज्य [0]।" की कुंजी "के साथ मॉडल स्थिति में लिखा गया है। मैं प्रत्येक खाता संख्या को प्रदर्शित करने के लिए सत्यापन में ValidationMessageFor (m => m.Accounts [i]) का उपयोग करता हूं इसलिए मॉडलस्टेट में "खाता [0]" की कुंजी होनी चाहिए। मैंने रिक्त नाम का उपयोग करके ओवरराइडप्रॉपर्टीनाम (संग्रहनाम) को बदलने और पूरी तरह से इस कथन को हटाने का प्रयास किया है लेकिन अभी भी इसे काम नहीं कर सकता है। – Dangerous
मैं इसे @ एचटीएमएल। वैलिडेशन मैसेज ("अकाउंट्स [i] .ccounts" का उपयोग करके काम कर सकता हूं) लेकिन फिर यह एक काम की तरह लगता है? मैं इस पर आपके विचारों की सराहना करता हूं? एक बार फिर धन्यवाद। – Dangerous
मैंने स्ट्रिंग के बजाय खाता मॉडल का उपयोग करने का निर्णय लिया है। इसलिए, त्रुटियों को अब सही तरीके से रिपोर्ट किया गया है। उपर्युक्त संग्रह नाम इसलिए पैरामीटर के रूप में आवश्यक नहीं है। – Dangerous