Jquery 来自JSON GET调用的敲除和部分视图
我对Jquery 来自JSON GET调用的敲除和部分视图,jquery,asp.net,asp.net-mvc,knockout.js,Jquery,Asp.net,Asp.net Mvc,Knockout.js,我对KnockoutJS相当陌生。我想用JSON获取检索部分视图和所有带有验证的绑定 我的模型: public class MyFormModel { [Required] [Range(typeof(Decimal), "1", "9999")] [Display(Name = Translations.WorkReport.PRICE_PER_UNIT)] //[DisplayFormat(ApplyFormatInEd
KnockoutJS
相当陌生。我想用JSON获取检索部分视图和所有带有验证的绑定
我的模型:
public class MyFormModel
{
[Required]
[Range(typeof(Decimal), "1", "9999")]
[Display(Name = Translations.WorkReport.PRICE_PER_UNIT)]
//[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#,##}")]
public decimal Price { get; set; }
[Required]
[Range(typeof(Decimal), "1", "9999")]
[Display(Name = Translations.WorkReport.QUANTITY)]
//[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#,##}")]
public decimal Quantity { get; set; }
...
我的控制器:
[HttpGet]
public virtual PartialViewResult GetDataByGroupId(int groupId)
{
...
var view = PartialView("WorkReportResult", createWorkReportsListFormModel);
return view
}
我的部分观点是:
@for (int i = 0; i < Model.WorksReportsFormModel.WorkReportViewModelList.Count; i++)
{
<tr>
<td class="center">
@Html.ValidationMessageFor(modelItem => Model.WorksReportsFormModel.WorkReportViewModelList[i].WorkReportFormModel.Price)
@Html.TextBoxFor(modelItem => Model.WorksReportsFormModel.WorkReportViewModelList[i].WorkReportFormModel.Price,
new
{
@Value = Model.WorksReportsFormModel.WorkReportViewModelList[i].WorkReportFormModel.Price != 0 ? Model.WorksReportsFormModel.WorkReportViewModelList[i].WorkReportFormModel.Price.ToString() : "",
id = @Html.RenderNumbers("Price", i),
@class = "input-small focused"
})
</td>
<td class="center">
@Html.ValidationMessageFor(modelItem => Model.WorksReportsFormModel.WorkReportViewModelList[i].WorkReportFormModel.Quantity)
@Html.TextBoxFor(modelItem => Model.WorksReportsFormModel.WorkReportViewModelList[i].WorkReportFormModel.Quantity,
new
{
@Value = Model.WorksReportsFormModel.WorkReportViewModelList[i].WorkReportFormModel.Quantity != 0 ? Model.WorksReportsFormModel.WorkReportViewModelList[i].WorkReportFormModel.Quantity.ToString() : "",
id = @Html.RenderNumbers("Quantity", i),
@class = "input-small focused"
})
</td>
$.ajax({
type: 'GET',
timeout: 30000,
url: '' + baseurl + '/CustomModel/ManageWorkReport/GetDataByGroupId',
data: { groupId: value},
cache: false,
success: function (data) {
if (data) {
$("#content").html(data);
...
但是不好,这里没有绑定。如何包括KnockoutJS
我发现了这个,但不起作用!
我用的是这样的东西:
var unmapped = ko.mapping.toJS(self.Model);
var unmappedJSON = ko.toJSON(unmapped);
$.ajax({
url: ...,
type: 'POST',
dataType: 'json',
contentType: 'application/json',
data: unmappedJSON,
success: function (data, textStatus, jqXHR) {
//var mapping = self.Model.IgnoreMapping();
var mapping = []
var viewModel = ko.mapping.fromJS(data, mapping, self.Model);
// TODO: Show errors from the server's validation
}
error: ...
});
在ViewModel中,我执行以下操作:
var vm = new ViewModel();
var d = @(Html.Raw(Json.Encode(Model)));
self.Model = ko.mapping.fromJS(d);
ko.applyBindings(vm);
在my View.cshtml中:
@Html.LabelFor(model => model.Description, "Description")
@Html.TextAreaFor(model => model.Description, new { data_bind = "value: Model.Description" })
@Html.ValidationMessageFor(model => model.Description)
模型(用c#)表示):
我希望这有助于解决您的问题。我很困惑:您的问题代码中没有与敲除相关的代码位?据我所知,没有数据绑定,没有客户端视图模型,没有应用绑定,什么都没有。你对我们到底有什么期望?@Jeroen我想他想把这段代码转换成使用Knockout。@JoseLuis可能是,但在这种情况下,这是一个非常广泛的问题,或者更可能是一个(架构)设计问题,与堆栈溢出的主题无关。事实上,我的代码如果更复杂,这是简化版。谢谢你的回答,但我正在使用parial view。也可以吗?我是否需要为每个模型属性输入数据?我所有的视图都是局部视图。我使用Ajax。您可以在我的“解决方案”中看到这个想法,并将其应用于您的问题。:-)是,为每个模型属性绑定数据。
@Html.LabelFor(model => model.Description, "Description")
@Html.TextAreaFor(model => model.Description, new { data_bind = "value: Model.Description" })
@Html.ValidationMessageFor(model => model.Description)
[Required]
public string Description { get; set; }