作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 Knockout.js 创建的表单。当用户按下提交按钮时,我将 View 模型转换回模型并尝试提交到服务器。我尝试过:
ko.utils.postJson(location.href, ko.toJSON(viewModel));
但是该对象在到达服务器时是空白的。我切换到这段代码:
$.ajax({
url: location.href,
type: "POST",
data: ko.toJSON(viewModel),
datatype: "json",
contentType: "application/json charset=utf-8",
success: function (data) { alert("success"); },
error: function (data) { alert("error"); }
});
它将数据发送到服务器,其中包含正确的数据。
但我想要的是提交数据,以便我的 Controller 可以重定向到正确的 View 。有什么建议吗?
最佳答案
Steve Sanderson 有一个较旧的示例,演示如何将提交的 JSON 数据正确绑定(bind)到 Controller 操作中: http://blog.stevensanderson.com/2010/07/12/editing-a-variable-length-list-knockout-style/
其要点是他创建了一个名为“FromJson”的属性,如下所示:
public class FromJsonAttribute : CustomModelBinderAttribute
{
private readonly static JavaScriptSerializer serializer = new JavaScriptSerializer();
public override IModelBinder GetBinder()
{
return new JsonModelBinder();
}
private class JsonModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var stringified = controllerContext.HttpContext.Request[bindingContext.ModelName];
if (string.IsNullOrEmpty(stringified))
return null;
return serializer.Deserialize(stringified, bindingContext.ModelType);
}
}
}
然后,操作如下:
[HttpPost]
public ActionResult Index([FromJson] IEnumerable<GiftModel> gifts)
现在,您可以使用 ko.utils.postJson 提交数据并以适当的 View 进行响应。
关于jquery - 将 json 提交到 MVC3 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036297/
我是一名优秀的程序员,十分优秀!