在MVC3中,如果模型具有嵌套对象,是否可以自动将javascript对象绑定到模型?我的模型看起来像这样:
public class Tweet
{
public Tweet()
{
Coordinates = new Geo();
}
public string Id { get; set; }
public string User { get; set; }
public DateTime Created { get; set; }
public string Text { get; set; }
public Geo Coordinates { get; set; }
}
public class Geo {
public Geo(){}
public Geo(double? lat, double? lng)
{
this.Latitude = lat;
this.Longitude = lng;
}
public double? Latitude { get; set; }
public double? Longitude { get; …Run Code Online (Sandbox Code Playgroud) 我遇到了json绑定到视图模型的问题.这是我的代码:
我的ViewModel的一部分(AddressViewModel有更多属性):
public class AddressViewModel
{
[Display(Name = "Address_Town", ResourceType = typeof(Resources.PartyDetails))]
public string Town { get; set; }
[Display(Name = "Address_Country", ResourceType = typeof(Resources.PartyDetails))]
public Country Country { get; set; }
}
public class Country : EntityBase<string>
{
public string Name { get; set; }
protected override void Validate()
{
if (string.IsNullOrEmpty(Name))
{
base.AddBrokenRule(new BusinessRule("CountryName", "Required"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
$(document).on("click", "#addAddress", function () {
var jsonData = {
"Town": $('#txt-Town').val(),
"District": $('#txt-District').val(),
"Street": $('#txt-Street').val(),
"PostCode": $('#txt-PostCode').val(),
"FlatNumber": $('#txt-FlatNumber').val(), …Run Code Online (Sandbox Code Playgroud) 我有一个控制器动作,其定义如下 -
public ActionResult ChangeModel( IEnumerable<MyModel> info, long? destinationId)
Run Code Online (Sandbox Code Playgroud)
而型号:
public class MyModel
{
public string Name; //Gets populated by default binder
public long? SourceId; //remains null though the value is set when invoked
}
Run Code Online (Sandbox Code Playgroud)
在"名称"属性,都会在控制器动作人口不过的sourceID财产保持为空.该目标-ID这是一个很长?参数也会被填充.
在单步执行MVC(版本2)源代码时,这是DefaultModelBinder抛出的异常.
从类型'System.Int32'到类型'System.Nullable`1 [[System.Int64,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]的参数转换失败,因为没有类型转换器可以转换这些类型.
如果模型更改为long而不是long?,则默认模型绑定器会设置该值.
public class MyModel
{
public string Name {get;set;}; //Gets populated by default binder
public long SourceId {get;set;}; //No longer long?, so value gets set
}
Run Code Online (Sandbox Code Playgroud)
这是一个已知的问题?由于MVC源代码已经过优化,我无法单步执行大部分代码. …
c# asp.net-mvc defaultmodelbinder model-binding asp.net-mvc-2
我正在尝试将JSON数据发布到Web Api方法,但JSON数据未绑定到模型.
这是我的模特:
[DataContract]
public class RegisterDataModel
{
[DataMember(IsRequired = true)]
public String SiteKey { get; set; }
[DataMember(IsRequired = true)]
public String UserId { get; set; }
[DataMember(IsRequired = true)]
public String UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的Web Api动作:
public class RegisterController : ApiController
{
public Guid Post([ModelBinder] RegisterDataModel registerDataModel)
{
if (!ModelState.IsValid)
{
throw new ModelStateApiException(ModelState);
}
var userProfileDataContract = userProfileBusinessLibrary.GetNewOne();
userProfileDataContract.UserId = registerDataModel.UserId;
userProfileDataContract.UserName = registerDataModel.UserName;
var userKey = userProfileBusinessLibrary.Register(registerDataModel.SiteKey, userProfileDataContract);
return userKey;
}
}
Run Code Online (Sandbox Code Playgroud)
在我添加[ModelBinder]之前,registerDataModel为null.添加[ModelBinder]后,registerDataModel是RegisterDataModel实例,但所有属性值都为null. …
你能告诉我一种方法,我可以将模型属性绑定到一个html元素,不使用html帮助器创建?
换句话说,对于一个普通的html元素,例如: <input type="text" />
我知道在knockout中有能力从observable属性中指定类,如下所示:
<div data-bind="css: Color " >
Run Code Online (Sandbox Code Playgroud)
Knockout还提供了指定条件类渲染的功能,如下所示:
<div data-bind="css: { 'my-class' : SomeBooleanProperty }" >
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要敲除css绑定在一起的那些功能,应该指定哪个标记?
我试过这个,但没有运气:
<div data-bind="css: { Color, 'my-class' : SomeBooleanProperty }" >
Run Code Online (Sandbox Code Playgroud)
我有错误:
错误:无法解析绑定.SyntaxError:意外的令牌,;
我没有在谷歌或官方文档中找到任何示例.
UPDATE
我找到了一个解决方法:在代码中构建样式字符串并将其放到属性中,如下所示:
item.AdditionalCss(Color() + " " + (result.IsSortable() ? 'my-class' : null));
Run Code Online (Sandbox Code Playgroud)
并在html中指定此类:
data-bind="css: AdditionalCss "
Run Code Online (Sandbox Code Playgroud)
但我有点疑惑,我认为这是肮脏的方法.我认为在标记中获得相同的结果会更好.如何通过标记实现这一目标?
我正在尝试创建一个视图,其中包含从数据库动态创建的复选框列表,然后在回发表单时检索所选复选框的列表.
我的EF模型包含一个类:
public class ItemIWouldLikeACheckboxFor {
public int Id { get; set; }
public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个包含以下列表的视图模型:
public class PageViewModel {
// various other properties
public List<ItemIWouldLikeACheckboxFor> checkboxList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的控制器获取方法:
public ActionResult Create() {
var viewModel = new PageViewModel();
viewModel.checkboxList = db.ItemIWouldLikeACheckboxFors.ToList();
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
我的看法:
<% using (Html.BeginForm()) { %>
<%-- other stuff here... %>
<% foreach (var item in checkboxList) { %>
<%: Html.CheckBox( <!-- what exactly ?????? -->) …Run Code Online (Sandbox Code Playgroud) 我正在尝试对集合中项目的属性执行远程验证.验证在集合的第一项上正常工作.对验证方法的http请求如下所示:
/Validation/IsImeiAvailable?ImeiGadgets[0].ImeiNumber=123456789012345
Run Code Online (Sandbox Code Playgroud)
但是,在下面的url看起来像的第二个项目上,验证不起作用
/Validation/IsImeiAvailable?ImeiGadgets[1].ImeiNumber=123456789012345
Run Code Online (Sandbox Code Playgroud)
现在我很确定这个的原因,就是绑定不会对一个不以零索引开头的集合起作用.
我的验证方法有如下签名:
public JsonResult IsImeiAvailable([Bind(Prefix = "ImeiGadgets")] Models.ViewModels.ImeiGadget[] imeiGadget)
Run Code Online (Sandbox Code Playgroud)
因为我在一个集合中传递一个项目,我必须像这样绑定,但我真正传递的只是一个值.
无论如何我可以解决这个问题,而不仅仅是将它绑定为普通的旧查询字符串.
谢谢
编辑:这是获取Imei变量的快速修复,但我宁愿使用模型绑定:
string imeiNumber = Request.Url.AbsoluteUri.Substring(Request.Url.AbsoluteUri.IndexOf("=")+1);
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的ImeiGadget类:
public class ImeiGadget
{
public int Id { get; set; }
[Remote("IsImeiAvailable", "Validation")]
[Required(ErrorMessage = "Please provide the IMEI Number for your Phone")]
[RegularExpression(@"(\D*\d){15,17}", ErrorMessage = "An IMEI number must contain between 15 & 17 digits")]
public string ImeiNumber { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}
Run Code Online (Sandbox Code Playgroud) ASP.NET Web API团队已决定将JSON.NET库用于模型绑定JSON数据.但是,"普通"MVC控制器仍然使用劣质JsonDataContractSerializer.这会导致解析日期的问题,并且让我很头疼.
请参阅此参考:http:
//www.devcurry.com/2013/04/json-dates-are-different-in-aspnet-mvc.html
作者选择在客户端的Knockout层中解决问题.但我更愿意通过在MVC控制器中使用与Web API控制器中相同的JSON.NET模型绑定器来解决此问题.
如何将不同的JSON模型绑定器替换为ASP.NET MVC?具体来说,就是JSON.NET库.如果可能,使用Web API中的相同模型绑定器将是理想的.
我有一个项目列表,我想删除复选框列表中选中的项目.
我不能使用像CheckboxList我Grid.Mvc用来显示我的线条的东西.这就是我在每行中创建复选框的原因column.add("<input type="checkbox".....>);.
每个复选框都有自己的ID:
<input type="checkbox" id="3">
<input type="checkbox" id="4">...
Run Code Online (Sandbox Code Playgroud)
我想知道如何将所有选中的复选框ID传递给控制器(从那里我将执行删除操作).如何通过一键按下从表单中将已检查ID的数组发布到我的控制器操作?
model-binding ×10
asp.net-mvc ×5
json ×3
c# ×2
razor ×2
asp.net ×1
checkbox ×1
css ×1
dynamic ×1
jquery ×1
knockout.js ×1
modelbinders ×1
validation ×1