我在一个网站上工作,我有一个控制器,在大量的数据,包括一个名称字段:
public Name name { get; set; }
定义如下:
public class Name
{
[RegularExpression(@"^[a-zA-ZÀ-ÿs-'.*]*$")]
public string First { get; set; }
[RegularExpression(@"^[a-zA-ZÀ-ÿs-'.*]*$")]
public string Last { get; set; }
public string DatabaseName { get; set; }
}
我一直在使用MVC页面,通过这个控制器传递数据,它的工作原理。这个页面上的所有字段都是MVC HTML helper,所以我有一个输入框:
@HTML.TextBoxFor(m => m.Name.First)
使用Fiddler,我可以看到数据作为Name传递。第一个:"john",这是正确的,这将正确返回结果。
然而,我有另一个页面,我不能使用HTML帮助。对于大多数字段,我能够使用JSON和异步AJAX调用正确获取数据:
var queryModel = {
SoundEx: $("#Soundex").val(),
ExactSearch: $(".exact").val(),
Name : {First : $('.col-sm-5 > .form-control[placeholder="First and Middle Names"]').val(),
Last: $('.col-sm-5 > .form-control[placeholder="Last Name"]').val()},
FromYear: $('.form-control[id="yearFrom"]').val(),
ToYear: $('.form-control[id="yearTo"]').val(),
SelectedType: $("#RecordDropdown").val(),
Location: $('.form-control[placeholder="Enter Location"]').val(),
Favorites: $("#Favorite").val(),
Free: $("#Free").val(),
Images: $("#Images").val(),
Category: $("#category").val(),
Database: $("#database").val(),
Keywords: $('.form-control[placeholder="Enter terms or words"]').val(),
FamilyMembers: [{ Relationship: $("#Type1").val(), Firstname: $("#First1").val(), LastName: $("#Last1").val() },
{ Relationship: $("#Type2").val(), Firstname: $("#First2").val(), LastName: $("#Last2").val() },
{ Relationship: $("#Type3").val(), Firstname: $("#First3").val(), LastName: $("#Last3").val() }],
PageNum: 1,
PageSize: 20,
newSearch: 1,
SortBy: "Relevance"
}
$(resultsDiv).html("<h3>Searching...</h3>");
resultsDiv.show();
$.ajax({
url: "http://nehgs.mvc/SearchResults/Results",
type: 'post',
dataType: 'text/html',
success: function (info) {
$(resultsDiv).html(info.responseText);
},
data: queryModel
});
我所有的搜索字段工作,除了名称和关系字段,即,无论在他们中输入的是正确的搜索在我的数据库中,返回的结果是正确的。然而,当填写姓名或关系字段时,它们不会被搜索;我仍然得到返回的数据,但是这些字段被视为空白。
在Fiddler中,我可以看到这些字段被传递为
Name[First]
和
Relationships[0][Firstname]
而在这些字段正在工作的页面中,它们被传递为
Name.First
和
Relationships[0].Firstname
这是我能想到的唯一导致这个问题的原因。我如何使JSON作为名称传递。用First代替Name[First]?
我通过使用本页提供的toDictionary()插件解决了这个问题:
http://erraticdev.blogspot.com/2010/12/sending-complex-json-objects-to-aspnet.html