Ниже приводится решение, которое я каким-то образом выяснил, я был бы рад, если бы кто-то помог мне улучшить мое решение
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()
Вы, вероятно, получаете это сообщение, потому что поле даты связывается с не допускающим NULL-значения DateTime на Вашей модели презентации. При изменении типа того поля или свойства к nullable DateTime Вы больше не должны получать это сообщение.
В любом случае можно настроить сообщение, что пользователь видит путем реализации IDataErrorInfo на модели презентации.
Я живо, что Вы ищете, являюсь этим
ViewData.ModelState.AddModelError("FieldName", "Date Format is not Correct!");
Это вызовет <%=Html.ValidationMessage("FieldName") %>
показать Ваше сообщение об ошибке.
Редактирование: Я просто проверил, и это на самом деле не решит проблему. Необходимо обратиться к ответу Craig Stuntz о не допускающем NULL-значения типе и IDataErrorInfo, и затем можно добавить собственное сообщение об ошибке для пустого поля.
Я попытался внедрить IDataErrorInfo в свои частичные классы, но у меня все равно появилось мошенническое сообщение об ошибке «Требуется значение» для раскрывающихся списков, в которых ничего не было выбрано, т.е. возвращать значение null, а не целое для внешнего ключа.
Я сделал это в первой строке моего действия Create:
public ActionResult Create([Bind(Exclude="Id")]MyEntity myEntityToCreate)
{
foreach (string key in ModelState.Keys)
{
ModelState[key].Errors.Clear();
}
, а затем полагался на свой собственный код проверки модели, который запускается при сохранении объекта, чтобы добавить значимые сообщения об ошибках в Коллекция ModelState, когда раскрывающиеся элементы не выбраны.
Вероятно, это не лучший способ сделать это.
Я тоже столкнулся с этой проблемой - она действительно возникает, когда поле модели привязано к типу, не допускающему значения NULL, в вашей модели данных.
То, как я обошел это - очистить информацию об ошибках в ModelState. В моем обработчике исключений в моем методе контроллера я делаю следующее:
foreach (var state in ModelState.Values)
{
if (state.Errors.Count > 0)
state.Errors.Clear();
}
, который удаляет поведение проверки по умолчанию, а затем запускает мое собственное. Обратите внимание, что это приведет к появлению ошибок, но без описания, если ваша собственная проверка не охватывает все ваши поля. Однако, если вы хотите очистить только одно поле, вы можете проверить его имя в словаре ModelState и просто очистить его.
К сожалению, куда бы вы ни посмотрели, большинство ответов на этот вопрос - «Внедрить IDataErrorInfo!».
Эта же проблема возникает, если вы пытаетесь, например, ввести текстовая строка в поле текстового поля, привязанная к целочисленному свойству. Проще говоря, если MVC не может преобразовать значение пользователя в правильный тип, он генерирует эти (совершенно бесполезные) общие ошибки и никогда не вызывает членов IDataErrorInfo.
Определенно сложно переопределить эти бесполезные сообщения, и лично я чувствую себя лучше Ответ - просто реализовать некоторую проверку на стороне клиента для обработки этих сценариев. Случаи, когда он генерирует эти сообщения, очень последовательны и легко предсказуемы:
Плюс, проверка на стороне клиента в любом случае это просто хорошая практика. Если у пользователя не включен javascript, он все равно сможет решить проблему, если вы используете Html.ValidationMessage () и / или стилизуете поля ввода для выявления проблем.
Если вы хотите исключить свойство из проверки, лучший способ сделать это, если вы используете привязка модели, которую вы хотите:
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, и одно исключенное свойство затем берется из этого набора.