我遇到了以下问题:
我有一个asp.net mvc 5控制器,引用类型作为参数:
[Route("")]
[HttpGet]
public ActionResult GetFeeds(Location location)
{
if (location == null)
{
// init location or smth
}
// Do smth with location
return new EmptyResult();
}
Run Code Online (Sandbox Code Playgroud)
您会注意到我正在使用AttributeRouting.没有其他方法具有此操作的名称.
但是 - 这是我的位置类:
public class Location : ILocation
{
public DbGeography Coordinates { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这里没什么特别的(界面定义了所有这些属性).
如果我正在访问控制器操作(实际上使用powershell)并传递类似于:
http://localhost:2000/Feed?latitude=23.1&longitude=37
Run Code Online (Sandbox Code Playgroud)
everthing工作正常,但如果我正在使用
http://localhost:2000/Feed
Run Code Online (Sandbox Code Playgroud)
location参数是非null(它是一个具有默认值的新位置),这是我想要的行为:(.
有谁知道为什么会这样?
提前致谢
我正在尝试将修改后的viewModel发送回我的服务器.不幸的是,我必须使用ko.mapping.fromJSON()和一些mappingOptions 创建我的viewModel,它工作正常.现在我需要一种简单的方法将创建的viewModel转换回原始方案.
我想转换这个:
var myModel = {
simpleProp: "test",
complexProp: {
simpleProp2: "test2",
simpleProp3: "test3"
}
};
Run Code Online (Sandbox Code Playgroud)
进入(JS):
var myModel = {
simpleProp: "test",
modifiedToSimpleProWithNewName: "test2"
};
Run Code Online (Sandbox Code Playgroud)
给我这个JSON:
{"simpleProp":"test","modifiedToSimplePropWithNewName": "test2"}
Run Code Online (Sandbox Code Playgroud)
我在想,因为ko.mapping.toJSON有一个映射参数,就像为这个方法创建另一个映射一样简单.但似乎ko.mapping实际上忽略了我的自定义属性创建:
var mappingOptions = {
// ignored
'simpleProp': {
create: function (thing) {
return "Changed simpleProps value";
}
},
// working
ignore: ["simpleProp3"]
};
Run Code Online (Sandbox Code Playgroud)
我为你创造了一个jsFiddle.
请注意:我已经简化了使用fromJSON删除模型生成的示例:
// created and modified by ko.mapping.fromJSON - with custom mapping!
var myModel …Run Code Online (Sandbox Code Playgroud)