то, как переопределить “Значение, требуется”. при проверке формата даты и времени в asp.net mvc представление?

cylinder-spiral Ниже приводится решение, которое я каким-то образом выяснил, я был бы рад, если бы кто-то помог мне улучшить мое решение

L = 50
h= 0.5
r= 5.0[![plot][1]][1]
R = np.sqrt((L*h)/(np.pi)+r**r)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
xpoints=[]
ypoints=[]

for theta in np.linspace(0,20,R):
        xpoints.append(1.1*theta*cos(theta))
        ypoints.append(1.1*theta*sin(theta))
        z = np.linspace(0,R)
        theta, z = np.meshgrid(t, z)
ax.plot_surface(xpoints,ypoints,z)
plt.show()

5
задан mhmd 2 April 2009 в 11:12
поделиться

6 ответов

Вы, вероятно, получаете это сообщение, потому что поле даты связывается с не допускающим NULL-значения DateTime на Вашей модели презентации. При изменении типа того поля или свойства к nullable DateTime Вы больше не должны получать это сообщение.

В любом случае можно настроить сообщение, что пользователь видит путем реализации IDataErrorInfo на модели презентации.

7
ответ дан 18 December 2019 в 09:10
поделиться

Я живо, что Вы ищете, являюсь этим

ViewData.ModelState.AddModelError("FieldName", "Date Format is not Correct!");

Это вызовет <%=Html.ValidationMessage("FieldName") %> показать Ваше сообщение об ошибке.

Редактирование: Я просто проверил, и это на самом деле не решит проблему. Необходимо обратиться к ответу Craig Stuntz о не допускающем NULL-значения типе и IDataErrorInfo, и затем можно добавить собственное сообщение об ошибке для пустого поля.

0
ответ дан 18 December 2019 в 09:10
поделиться

Я попытался внедрить IDataErrorInfo в свои частичные классы, но у меня все равно появилось мошенническое сообщение об ошибке «Требуется значение» для раскрывающихся списков, в которых ничего не было выбрано, т.е. возвращать значение null, а не целое для внешнего ключа.

Я сделал это в первой строке моего действия Create:

public ActionResult Create([Bind(Exclude="Id")]MyEntity myEntityToCreate)
{
    foreach (string key in ModelState.Keys)
    {
        ModelState[key].Errors.Clear();
}

, а затем полагался на свой собственный код проверки модели, который запускается при сохранении объекта, чтобы добавить значимые сообщения об ошибках в Коллекция ModelState, когда раскрывающиеся элементы не выбраны.

Вероятно, это не лучший способ сделать это.

3
ответ дан 18 December 2019 в 09:10
поделиться

Я тоже столкнулся с этой проблемой - она ​​действительно возникает, когда поле модели привязано к типу, не допускающему значения NULL, в вашей модели данных.

То, как я обошел это - очистить информацию об ошибках в ModelState. В моем обработчике исключений в моем методе контроллера я делаю следующее:

foreach (var state in ModelState.Values)
{
  if (state.Errors.Count > 0) 
    state.Errors.Clear();
}

, который удаляет поведение проверки по умолчанию, а затем запускает мое собственное. Обратите внимание, что это приведет к появлению ошибок, но без описания, если ваша собственная проверка не охватывает все ваши поля. Однако, если вы хотите очистить только одно поле, вы можете проверить его имя в словаре ModelState и просто очистить его.

3
ответ дан 18 December 2019 в 09:10
поделиться

К сожалению, куда бы вы ни посмотрели, большинство ответов на этот вопрос - «Внедрить IDataErrorInfo!».

Эта же проблема возникает, если вы пытаетесь, например, ввести текстовая строка в поле текстового поля, привязанная к целочисленному свойству. Проще говоря, если MVC не может преобразовать значение пользователя в правильный тип, он генерирует эти (совершенно бесполезные) общие ошибки и никогда не вызывает членов IDataErrorInfo.

Определенно сложно переопределить эти бесполезные сообщения, и лично я чувствую себя лучше Ответ - просто реализовать некоторую проверку на стороне клиента для обработки этих сценариев. Случаи, когда он генерирует эти сообщения, очень последовательны и легко предсказуемы:

  • Пользователь не предоставил значение для поля, не допускающего значения NULL
  • Пользователь ввел или выбрал значение, которое не может быть преобразовано в базовый тип (например: текст в числовое поле)

Плюс, проверка на стороне клиента в любом случае это просто хорошая практика. Если у пользователя не включен javascript, он все равно сможет решить проблему, если вы используете Html.ValidationMessage () и / или стилизуете поля ввода для выявления проблем.

4
ответ дан 18 December 2019 в 09:10
поделиться

Если вы хотите исключить свойство из проверки, лучший способ сделать это, если вы используете привязка модели, которую вы хотите:

public ActionResult Create([Bind(Exclude="LastUpdated")] Contact contactToValidate)
{

}

если, с другой стороны, вы используете UpdateModel или TryUpdateModel, вы можете использовать:

string prefix = string.Empty;
string[] includedProperties = new string[0];
string[] excludedProperties = new [] { "LastUpdated" };

TryUpdateModel<Contact>(contactToValidate, prefix, includedProperties, excludedProperties);

Обратите внимание, что, поскольку вы отправляете пустой массив для включенных свойств, вы фактически включаете ВСЕ properties, и одно исключенное свойство затем берется из этого набора.

1
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: