如何在视图中使用JSON数据?
我现在在flexigrid的Edit按钮中使用以下代码:
var url = '/Client/Details/' + id ; $.getJSON(url, function (data) { // setFormControls(data.Id, data.Role, data.Location, data.JobType, data.Description); alert(data); }); //location.replace(url); RunModalDialog("Edit Client: " + ClientName);
我的表格有点像这样复杂的观点
@model CardNumbers.Models.ClientViewModel @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "sform", title = "Client Info" })) {
其中EditorFor是一个自定义的EditorFor。 因此,将返回的json数据手动转换为表单属性会有点困难。 我想知道可能有一些简单的方法来做这种翻译吗? 我查看了knockout.js,但我还没有在我的项目中使用它,所以我想知道是否还有其他的东西?
在此先感谢您的帮助。
UPDATE。 只是为了让我的问题更清楚,我正在添加更多信息。
我的主要观点是:
@model CardNumbers.Models.ClientViewModel @section scripts { }
@Html.Partial("_ClientForm", Model);
我的js文件有以下内容:
var $dlg = $("#sform").dialog({ autoOpen: false, show: "blind", closeOnEscape: true, resizable: true, width: 1200, height: 750, minHeight: 600, minWidth: 950 }); function RunModalDialog(title, url) { if (title) $dlg.dialog("option", {"title": title }); if (url) { $dlg.load(url).dialog("option", { "title": title }).dialog("open"); } //$dlg.load(url, function () { // var validator = $("#sform").validate(); // if (validator) // validator.resetForm(); // $dlg.dialog("option", { "title": title }).dialog("open"); //}); else { var validator = $("#sform").validate(); if (validator) validator.resetForm(); $dlg.dialog("open"); } } function add(com, grid) { $('#fntype').val('Add'); var url = '/Client/Add/' //location.replace(url); RunModalDialog("Create New Client"); // clearForm(); } function edit(com, grid) { $('.trSelected', grid).each(function () { var id = $(this).attr('id'); id = id.substring(id.lastIndexOf('row') + 3); currentId = id; $('#fntype').val('Edit'); var ClientName; ClientName =$('.trSelected td:eq(2)').text(); var url = '/Client/Edit/' + id ; $.getJSON(url, function (html) { // setFormControls(data.Id, data.Role, data.Location, data.JobType, data.Description); // alert(data); $('#editor').html(html); }); //location.replace(url); RunModalDialog("Edit Client: " + ClientName); }); }
现在我看到添加和编辑的相同行为,例如编辑不显示数据。 我现在看到了http://sofzh.miximages.com/jquery/01562893.jpg
如果您想更轻松,只需将您显示的代码放在局部视图中,然后让Details控制器操作返回此局部视图。 现在,当您使用AJAX调用此操作时,它将返回您可以在DOM中直接替换的部分的更新内容。 这样您就不必费心将JSON值绑定到表单元素。
public ActionResult Details(int id) { ClientViewModel model = ... return PartialView(model); }
然后:
var url = '/Client/Details/' + id ; $.getJSON(url, function (html) { $('#someContainerDiv').html(html); });
我的示例中使用的#someContainerDiv
显然会在主视图中定义:
@Html.Partial("Details", Model)
然后,部分将包含您在问题中显示的表单。
随着Jazzen Chen的帮助,我们解决了这个问题。 我需要改变的是在上面使用get而不是getJSON。 现在我的表单正确地显示了数据。