Javascript 在EXT窗体面板中填充EXT JS存储
使用ASP.NET MVC操作方法将Json返回到视图,以便以EXT JS形式显示数据。在everythingLoaded函数中,我总是将记录值设置为null,即使我可以看到action方法在Ext.Create之后返回JSON数据。我试图实现的是填充从action方法传递回面板内文本框的firstName和lastName参数。你能帮忙吗?下面是代码 ->App.JSJavascript 在EXT窗体面板中填充EXT JS存储,javascript,c#,json,asp.net-mvc,extjs,Javascript,C#,Json,Asp.net Mvc,Extjs,使用ASP.NET MVC操作方法将Json返回到视图,以便以EXT JS形式显示数据。在everythingLoaded函数中,我总是将记录值设置为null,即使我可以看到action方法在Ext.Create之后返回JSON数据。我试图实现的是填充从action方法传递回面板内文本框的firstName和lastName参数。你能帮忙吗?下面是代码 ->App.JS Ext.onReady(function() { //Define Store Ext.define('St
Ext.onReady(function() {
//Define Store
Ext.define('StudentModel', {
extend: 'Ext.data.Model',
idProperty: 'Id',
fields: [
{ name: 'Id', type: 'int' },
{ name: 'firstName', type: 'string' },
{ name: 'lastName', type: 'string' },
{ name: 'birthDate', type: 'date' },
{ name: 'street', type: 'string' },
{ name: 'apartment', type: 'string' },
{ name: 'city', type: 'string' },
{ name: 'state', type: 'string' },
],
validations: [{
type: 'presence',
field: 'firstName'
}]
});
var store = Ext.create('Ext.data.Store', {
model: 'StudentModel',
storeId: 'StudentStoreId',
proxy: {
type: 'ajax',
url: '/Home/GetStudentSubmissions',
reader: {
type: 'json',
rootProperty: 'data'
}
},
autoLoad: { callback: everythingLoaded }
}
);
function everythingLoaded()
{
var record = store.getAt(0);
//Here record is always null
Ext.form('MyPanel').getForm().loadRecord(record);
}
Ext.define('StudentView', {
extend: 'Ext.form.Panel',
id: 'MyPanel',
alias: 'widget.StudentView',
title: 'Student Information',
resizable: false,
collapsible: true,
store:store,
bodyPadding: '5',
buttonAlign: 'center',
border: false,
trackResetOnLoad: true,
layout: {
type: 'vbox'
},
defaults: {
xtype: 'textfield',
msgTarget: 'side',
labelAlign: 'top',
labelStyle: 'font-weight:bold'
},
items: [{
xtype: 'fieldcontainer',
layout: 'hbox',
defaultType: 'textfield',
width: '100%',
fieldDefaults: {
labelAlign: 'top',
labelStyle: 'font-weight:bold'
},
items: [{
fieldLabel: 'First Name',
name: 'firstName',
allowBlank: false
}, {
fieldLabel: 'Last Name',
name: 'lastName',
allowBlank: false
}]
}]
});
//Here count is always 0
var i = store.getCount();
Ext.create('widget.StudentView', {
renderTo: 'studentMasterForm'
});
});
->C作用法
public JsonResult GetStudentSubmissions()
{
return Json(GetStudents(), JsonRequestBehavior.AllowGet);
}
public Student GetStudents()
{
Student studobj = new Student();
studobj.Id = 1;
studobj.firstName = "Aravind";
studobj.lastName = "R";
studobj.state = "NJ";
studobj.street = "Center Grove";
studobj.birthDate = new DateTime(1989, 6, 6);
studobj.apartment = "DD8";
studobj.city = "XYZ";
return studobj;
}
}
->学生示范班
公立班学生
{
公共int Id{get;set;}
公共字符串名{get;set;}
公共字符串lastName{get;set;}
公共日期时间出生日期{get;set;}
公共字符串street{get;set;}
公共字符串单元{get;set;}
公共字符串city{get;set;}
公共字符串状态{get;set;}
}您的c代码返回一个对象Student,但它应该返回一个对象,该对象的数据属性为Student数组 您需要返回此类型的对象:
public class ExtStore
{
public List<Student> data = new List<Student>();
}
谢谢马修!!不知道为什么我不能早点赶上它!这就是为什么记录总是空的原因。现在我可以看到填充的记录值。现在我遇到了一个ExtJS问题:EXT.form'MyPanel'.getForm.loadRecordrecord;正在中断,异常为0x800a138a-JavaScript运行时错误:函数ExpectedText.get'MyPanel'。LoadRecordRecordRecord;谢谢马修。。它正在引发不支持属性或方法“loadRecord”的异常对象。然而,我尝试了另一种方式。var formPanel=Ext.create'widget.StudentView'…&然后是formPanel.getForm.loadRecordrecord;真管用!!另一方面,是否有方法在表单面板中传递对象类型并填充其值,而不是传递列表并使用GetAt0?在我的例子中,我只有一行数据..你应该将这个线程标记为已解决,接受我的答案。是的,有一种方法:formPanel.getForm.setValuesyourobject;嗨,Mathieu,我正在尝试使用对象类型而不是列表集合来实现相同的解决方案。getForm.setValues在版本5中似乎已被弃用。我尝试了formPanel.getForm.loadRecordstore,但它不起作用。但是,我可以在store.proxy.reader.rawdata中看到服务器返回的数据。
public ExtStore GetStudents()
{
Student studobj = new Student();
studobj.Id = 1;
studobj.firstName = "Aravind";
studobj.lastName = "R";
studobj.state = "NJ";
studobj.street = "Center Grove";
studobj.birthDate = new DateTime(1989, 6, 6);
studobj.apartment = "DD8";
studobj.city = "XYZ";
ExtStore exs = new ExtStore();
exs.data.Add(studobj);
return exs;
}