我正在将数据从javascript应用程序发送到MVC5控制器,但是,当数据提交到Submit
controller操作时,它永远不会被调用。我有一些非常简单的映射器,它们创建以下JSON对象:
function mapContactDto(vm)
{
var contactDto = {};
contactDto.firstName = vm.firstName();
contactDto.lastName = vm.lastName();
contactDto.companyName = vm.companyName();
contactDto.emailAddress = vm.emailAddress();
contactDto.phonePrimary = vm.phonePrimary();
contactDto.phoneSecondary = vm.phoneSecondary();
contactDto.address1 = vm.address1();
contactDto.address2 = vm.address2();
contactDto.city = vm.city();
contactDto.postalCode = vm.postalCode();
contactDto.country = vm.country();
return contactDto;
}
function mapCartItems(vm)
{
var cartItemsDto = new Array();
$.each(vm.selectedOptions(), function (index, step, array) {
var sku = step.selection().sku;
if (sku !== "0") {
cartItemsDto.push(sku);
}
});
return cartItemsDto;
}
/* if i dump the object that is sent to the server with `console.log(JSON.stringify(item))` I get:
{
"skus": ["1001","8GB","201"],
"contact": {
"firstName":"Jon",
"lastName":"Doe",
"companyName":"Yup my company",
"emailAddress":"contact@me.com",
"phonePrimary":"012111 231",
"phoneSecondary":"",
"address1":"1 Billing Way",
"address2":"Navigation House",
"city":"London",
"postalCode":"112211",
"country":"GB"
}
}
*/
然后,我使用以下代码发送数据:
var contactDto = mapContactDto(self.billingVm());
var cartItemsDto = mapCartItems(self.configurationVm());
var req = new XMLHttpRequest();
req.open('HEAD', document.location, false);
req.send(null);
var item = {
skus: mapCartItems(cartItemsVm()),
contact: mapContactDto(billingVm())
};
var url = '/Knockout/Submit';
$.ajax({
cache: false,
url: url,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: item,
type: 'POST',
success: function (data, textStatus, jqXHR) {
},
error: function (data, textStatus, jqXHR) {
}
});
我的控制器代码如下:
public JsonResult Submit(string[] Skus, ContactDto Contact)
{
return Json(new { success = true, message = "Some message" });
}
/* and MVC models are: */
public class ContactDto
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string CompanyName { get; set; }
public string EmailAddress { get; set; }
public string PhonePrimary { get; set; }
public string PhoneSecondary { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
}
我有以下问题:
但是,从不会调用Submit,但是,如果我注释掉了控制器参数,Submit()
那么它将被调用,这是为什么呢?
从上面看来,控制器框架似乎无法匹配参数-知道我在做什么错吗?
如何在MVC控制器上启用调试,以便了解发生了什么情况?
您将必须进行两项更改:如下对Json进行字符串化:
$.ajax({
cache: false,
url: url,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify(item),
type: 'POST',
success: function (data, textStatus, jqXHR) {
},
error: function (data, textStatus, jqXHR) {
}
});
其次,只需使用[HttpPost]
以下方法注释您的方法:
[HttpPost]
public JsonResult Submit(string[] Skus, ContactDto Contact)
{
return Json(new { success = true, message = "Some message" });
}
我是一个使用ASP.NET MVC5的新手。我需要对控制器进行Jquery调用,以返回一个传递单个参数的新视图。我可以看到很多类似MVC3和之前版本的例子,但却很难找到任何处理MVC4或MVC5并起作用的例子。我所要做的就是从输入元素获取一个值,将其传递给控制器ActionResult,然后打开一个新视图。 PageTwo是视图,Home是控制器。 我试过的代码(包括许多其他代码)通常在404:
我是新来的Spring应用程序。我试图创建小Spring应用程序,但我得到404错误消息。似乎控制器(indexController)没有开始调用。我累了调试,但它不在那里。 文件位置: /WebContent/WEB-INF/pages/index.html /WebContent/WEB-INF/HelloWebServlet。xml /WebContent/WEB-INF/web.xml H
假设我有一个名为的扩展,my_extension一个名为的插件。 然后,我的控制器中有一个名为的函数。 如何通过通常的http GET请求从外部调用此?
我在MVC4中遇到了一个非常恼人的问题,我的表单发布没有达到我指定的操作。我以前做过很多次,它工作得很好,但在我的新项目中,它似乎根本不起作用。 HTML/Razor: 控制器: 路由配置: 型号: 有什么想法吗?谢谢!
我正在使用 Rails 3,并且我在 StatusController 中有一个form_for。当我点击提交按钮时,我的创建方法永远不会被调用。我的创建方法有一个redirect_to:index,但是当我点击提交时,所有信息都保留在表单中,并且页面不会重定向。但是,该对象确实在数据库中正确保存。 这是什么原因造成的? 控制器: 查看: 我已经将代码调整到此,现在数据在提交时从表单中消失,但是对
对于我们的web应用程序,我需要保存获取和显示的项的顺序,这取决于视图--或者准确地说--生成视图的控制器和操作(当然还有用户id,但这不是这里的重点)。 我认为,与其在每个控制器操作中自己给出一个标识符(以便使用它对DB输出进行视图依赖的排序),不如从控制器和操作方法中自动创建这个标识符更安全、更容易。 如何从控制器的操作方法中获取控制器和操作的名称?还是我需要反思?