我目前正在使用ASP.NET MVC,并尝试为我的应用程序创建一个前端网站。在此应用程序中,我通过HTTP GET传递了5个字段:
String1 _____ (required)
String2 _____ (default to * if empty serverside)
String3 _____
String4 _____
Integer5 ____ (String3, String4, OR Integer5 must be supplied; one or all, not none)
当前,我正在尝试使用数据注释(例如[Required]
和[DisplayFormat(ConvertEmptyStringToNull = false)]
)在模型内部验证它们,并在null的情况下传递默认值。但是,对于String2,如果默认情况下需要特殊的通配符值,则传递空字符串会导致模型将null值转换为空,但完全忽略了我的默认值。我也使用ModelState.IsValid
来强制执行我的视图模型,并且ModelState似乎忽略了控制器中的任何更改,因此IsEmptyorNull检查似乎不起作用。我的模型如下:
public class ProjectInput
{
[Required]
public string String1 { get; set; } = "0";
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string String2 { get; set; } = "****";
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string String3 { get; set; } = "";
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string String4 { get; set; } = "";
[RegularExpression("[0-9]*")]
public int Integer5 { get; set; } = 0;
}
我为此找到的一种解决方法是不手动在URL中指定问题字段,这导致它们使用我为其设置的默认值,但是我找不到通过提交来执行此操作的方法而不使用Javascript,我试图避免使用围绕AJAX的客户端验证方法。我还尝试为输入标签指定Placeholder
的{{1}}标签,但这又导致再次为null。
我的问题重申:除了使用Javascript或AJAX客户端验证之外,如果在HTTP GET请求中留空,是否可以强制HTML中的输入标签返回给定值(而不是null)?如果没有,是否可以发出GET请求,将空白的提交内容排除在URL之外?
请注意,“不,您需要客户端验证/ Javascript”是我愿意(伤心欲绝)接受的答案,但是我想知道是否还有其他选择。