我正在使用带有Data Annotations的ASP .NET MVC和jQuery validate插件.
有没有办法标记某个字段(或某些数据注释)应该只在服务器端验证?
我有一个带有屏蔽插件的电话号码字段,正则表达式验证器在用户端变得疯狂.正则表达式只是一个故障安全(如果有人决定破解javascript验证),所以我不需要它在客户端运行.但我仍然喜欢运行客户端的其他验证.
在Web.config文件中使用全球化culture ="da-DK"时,jQuery验证不起作用.
在丹麦,当我们为产品写价格时,我们使用符号19,95而不是美国19.95的方式,这给了我一个问题,我无法解决.
我已经启动了VS2010,新的MVC 3项目,添加了一个homeController,一个Product类和一个简单的标准编辑视图,错误已经存在.
产品类别:
public class Product
{
public string name { get; set; }
public string itemNo { get; set; }
public decimal price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
HomeController的:
public class homeController : Controller
{
public ActionResult Index()
{
var product1 = new Product { name = "Testproduct", itemNo = "PRD-151541", price = 19 };
return View(product1);
}
}
Run Code Online (Sandbox Code Playgroud)
索引视图:
@model WebUI.DomainModel.Product
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Product</legend>
<div class="editor-label"> …Run Code Online (Sandbox Code Playgroud) 我正在尝试进行客户端验证(模型绑定)以支持不同的文化,我发现了一个有趣的博客,我正在尝试实现该主题.
http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx
波科
public class Jogador
{
public int ID { get; set; }
public string Name { get; set; }
public decimal Salary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有自定义的DecimalModelBinder类
public class DecimalModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState {Value = valueResult};
object actualValue = null;
try
{
actualValue = Convert.ToDecimal(valueResult.AttemptedValue, CultureInfo.CurrentCulture);
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}
}
Run Code Online (Sandbox Code Playgroud)
我的web.config:
<compilation …Run Code Online (Sandbox Code Playgroud) 我的问题是,当我尝试通过ajax将double或decimal发送到我的C#MVC Controller时,该值始终为null.我可以将值作为字符串发送,我可以毫无问题地发送整数.为什么我不能发送带小数的值?当我检查从客户端发送的请求时,存在正确的值(表单数据是price=84.50).
错误:
参数字典包含非可空类型'System.Decimal'的参数'price'的空条目
HTML:
<input type="number" step="1" class="form-control" name="price" id="price">
<button type="button" class="btn btn-success">Send</button>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
$('.btn-success').click(function () {
//var price = $('#price').val(); - Did not work
//var price = Number($('#price').val()); Did not work
var price = Number($('#price').val()).toFixed(2); // Does not work
$.ajax({
url: 'PriceFunction',
type: 'POST',
data: {
price: price,
}
}).done(function () {
}).fail(function () {
console.log("Error in ajaxfunction!");
});
});
Run Code Online (Sandbox Code Playgroud)
C#:
[HttpPost]
public void PriceFunction(decimal price)
{
// I have tried with decimal, double and …Run Code Online (Sandbox Code Playgroud) 我有这个领域:
public decimal Price { get; set; } 在数据库中它是十进制的(7,2).
视图:
@Html.EditorFor(model => model.Price,
new { htmlAttributes = new { @class = "form-control" } })
Run Code Online (Sandbox Code Playgroud)
如果我用逗号放一个值,MVC默认验证不接受,说:"The field must be a number".(我尝试使用正则表达式,但没办法)
例如: 5,00, 55,00 or 555,00
这个:
public DateTime date { get;set; }
Run Code Online (Sandbox Code Playgroud)
视图:
@Html.EditorFor(model => model.Date,
new { htmlAttributes = new { @class = "form-control" } })
Run Code Online (Sandbox Code Playgroud)
MVC默认验证不接受格式的日期dd/mm/yyyy,仅在mm/dd/yyyy.
例如: 13/02/2015, 15/06/2013, 25/08/2012
是全球化还是什么?我怎么解决这个问题?
c# ×3
jquery ×3
asp.net-mvc ×2
validation ×2
ajax ×1
culture ×1
datetime ×1
decimal ×1
javascript ×1
model ×1