我有一种情况,我需要NHibernate忽略它的缓存,只是命中数据库,因为数据已经改变(另一台计算机上的另一个用户已经更改了数据).这怎么可能?到目前为止,我没有运气.获取,加载,Linq查询,没关系.NHibernate没有获得最新的数据.
我有以下Controller签名:
public void DoSomething(string dialerJob, MyViewModel[] agentStates)
Run Code Online (Sandbox Code Playgroud)
viewModels表示数组中的表单字段(HTML表中的选定项).我想出了如何将表单元素int作为数组参数传递给控制器,这要感谢Robert Koritnik的.toDictionary()jQuery插件(http://erraticdev.blogspot.com/2010/12/sending-complex-json-对象到aspnet.html).
但是,现在我需要将一个额外的字符串参数(从下拉列表)传递给控制器,我无法弄清楚如何使其工作.我尝试过各种组合,比如:
var job = $('#DialerJobs').attr('value');
var data1 = $.toDictionary(data, "agentStates");
$.ajax({
url: "/Blending/ChangeOutboundJob",
type: "POST",
dataType: "application/JSON",
data: {job, data1}
});
Run Code Online (Sandbox Code Playgroud)
我也尝试过以下方法:
var job = $('#DialerJobs').attr('value');
var data1 = $.toDictionary(data, "agentStates");
$.ajax({
url: "/Blending/ChangeOutboundJob",
type: "POST",
dataType: "application/JSON",
data: {dialerJob: job, agentStates: data1}
});
Run Code Online (Sandbox Code Playgroud)
但是没有工作.
如果我从要发送的数据中删除dialerJob参数,则agentStates会正确填充控制器.发送的内容如下所示:
agentStates[0].agentId=7654&agentStates[0].projectId=999&agentStates[0].stateId=1&agentStates
Run Code Online (Sandbox Code Playgroud)
[0] .subStateId = 1&agentStates [1] .agentId = 9876&agentStates [1] .projectId = 999&agentStates
[1] .stateId = 1&agentStates [1] .subStateId = 1
但是,如果我包括dialerJob,那么发送的是:
dialerJob=SomeJob&agentStates[0][name]=[0].agentId&agentStates[0][value]=84&agentStates[1][name]=
Run Code Online (Sandbox Code Playgroud)
[0] .projectId&agentStates …
我在页面上有几个选择列表.它们都以数组方式命名,以便它们在视图模型的列表中回发到Controller.渲染它们时,它们看起来像这样:
<select id="OrderItemViewModels_2__OrderItemStatusId" name="OrderItemViewModels[2].OrderItemStatusId"><option value="-1"></option>
<option value="1">CONFIRMED</option>
<option value="2">NO SALE</option>
<option value="3">PENDING</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我正在尝试将.change事件处理程序绑定到它们,因此我可以触发.ajax调用以根据此值的值填充另一个下拉列表,但绑定不起作用.JS看起来像这样:
$(document).ready(function () {
$('select[name$="OrderItemStatusId"]').each(function (){
//alert(this.name);
var dropdown = this;
dropdown.change(function() {
alert('testing ');
//GetOrderItemReasons(dropdown.val());
});
});
Run Code Online (Sandbox Code Playgroud)
我收到的错误是"对象不支持此属性或方法".但是,第一个警报清楚地显示该项目正在被选中,因为它正确显示了名称.
我在这做错了什么?
Phil Haack有一篇文章描述了如何进行设置,因此默认模型绑定器将绑定到帖子后面的集合:
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
我遇到的问题是我不只是尝试将一个集合发送回Controller操作,而是一个带有集合的ViewModel.
我有一个基本上看起来像这样的课程:
public class MyViewModel
{
public int IncidentNumber { get; set; }
public string StoreId { get; set; }
public string RepId { get; set; }
public string OrderStatus { get; set; }
public CustomerViewModel Customer { get; set;
//... other properties and SelectLists for binding
public IEnumerable<OrderItemViewModel> OrderItemViewModels { get; set; }
Run Code Online (Sandbox Code Playgroud)
我实际上可以在回发中获取CustomerViewModel数据,但OrderItemViewModels列表为空.我该如何取回这些?菲尔的文章没有帮助那里.