我有以下JSON字符串作为字符串参数传递给我的c#代码 - AddLocation(string locationJSON):
{"accountId":"57abb4d6aad4","address":{"city":"TEST","country":"TEST","postalCode":"TEST","state":"TEST","street":"TEST"},"alternateEmails":[{"email":"TEST"}],"alternatePhoneNumbers":[{"phoneNumber":"TEST"}],"alternateWebsites":[{"website":"TEST"}],"auditOnly":false,"busName":"593163b7-a465-43ea-b8fb-e5b967d9690c","email":"TEST EMAIL","primaryKeyword":"TEST","primaryPhone":"TEST","rankingKeywords":[{"keyword":"TEST","localArea":"TEST"}],"resellerLocationId":"5461caf7-f52f-4c2b-9089-2ir8hgdy62","website":"TEST"}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将JSON添加到这样的RestSharp POST请求中,但它不起作用:
public string AddLocation(string locationJSON)
{
var client = new RestClient(_authorizationDataProvider.LocationURL);
var request = new RestRequest(Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", _authorizationResponse.Token);
...
request.AddJsonBody(locationJSON);
var response = client.Execute(request);
}
Run Code Online (Sandbox Code Playgroud)
响应回复为"错误请求".如果我在调试器中检查响应,这是我得到的:
{"code":"invalid_json","details":{"obj.address":[{"msg":["error.path.missing"],"args":[]}],"obj.rankingKeywords":[{"msg":["error.path.missing"],"args":[]}],"obj.alternatePhoneNumbers":[{"msg":["error.path.missing"],"args":[]}],"obj.busName":[{"msg":["error.path.missing"],"args":[]}],"obj.accountId":[{"msg":["error.path.missing"],"args":[]}],"obj.alternateEmails":[{"msg":["error.path.missing"],"args":[]}],"obj.alternateWebsites":[{"msg":["error.path.missing"],"args":[]}],"obj.email":[{"msg":["error.path.missing"],"args":[]}],"obj.primaryKeyword":[{"msg":["error.path.missing"],"args":[]}],"obj.auditOnly":[{"msg":["error.path.missing"],"args":[]}]}}
Run Code Online (Sandbox Code Playgroud)
我在调用AddJsonBody之后检查了请求参数,并且值似乎包括双引号的转义序列 - 这似乎是个问题.
{\"accountId\":\"57abb4d6aad4def3d213c25d\",\"address\":{\"city\":\"TEST\",\"country\":\"TEST\",\"postalCode\":\"TEST\",\"state\":\"TEST\",\"street\":\"TEST\"},\"alternateEmails\":[{\"email\":\"TEST\"}],\"alternatePhoneNumbers\":[{\"phoneNumber\":\"TEST\"}],\"alternateWebsites\":[{\"website\":\"TEST\"}],\"auditOnly\":false,\"busName\":\"84e7ef98-7a9f-4805-ab45-e852a4b078d8\",\"email\":\"TEST EMAIL\",\"primaryKeyword\":\"TEST\",\"primaryPhone\":\"TEST\",\"rankingKeywords\":[{\"keyword\":\"TEST\",\"localArea\":\"TEST\"}],\"resellerLocationId\":\"06b528a9-22a6-4853-8148-805c9cb46941\",\"website\":\"TEST\"}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何将json字符串添加到请求体?
我无法弄清楚如何确定在我的剑道下拉列表中选择了哪个项目.我的观点将其模型定义为:
@model KendoApp.Models.SelectorViewModel
Run Code Online (Sandbox Code Playgroud)
ViewModel定义为:
public class SelectorViewModel
{
//I want to set this to the selected item in the view
//And use it to set the initial item in the DropDownList
public int EncSelected { get; set; }
//contains the list if items for the DropDownList
//SelectionTypes contains an ID and Description
public IEnumerable<SelectionTypes> ENCTypes
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我有:
@(Html.Kendo().DropDownList()
.Name("EncounterTypes")
.DataTextField("Description")
.DataValueField("ID")
.BindTo(Model.ENCTypes)
.SelectedIndex(Model.EncSelected)
)
Run Code Online (Sandbox Code Playgroud)
这个DropDownList包含我期望的值,但是当用户单击提交按钮时,我需要将所选值传递回我的控制器.一切正常,但我无法访问从控制器的[HttpPost]操作中选择的项目.那么,我如何将DropDownList的值分配给隐藏的表单字段,以便它可供控制器使用?
我想就何时/是否可以将代码置于代码隐藏中获得一些意见.我现在只有不到一年的时间.所以,我仍然认为自己非常"绿色".我来自德尔福背景.因此,学习曲线至少可以说 - 学习WPF,XAML,C#,Unity,Prism,MEF,.NET,MVVM等......有趣但非常具有挑战性.
当我刚开始不到一年的时候,办公室里的想法是代码隐藏的代码,如果可能的话,没有查看虚拟机中的特定代码.所以,我已经多次绞尽脑汁来确定如何推送字面上的一切进入虚拟机并保持我认为是从VM中查看特定代码只是为了几乎每次都出现短缺.我现在已经到了这一点,我开始认为代码隐藏并不总是坏或"错误".我最近试图通过尝试将任何代码隐藏到VM中来清理我们的一些视图,这导致我在http://blog.functionalfun.net/2008/09/hooking-up-commands-找到一个整洁的工厂类.to-events-in-wpf.html.这允许您将路由事件绑定到ICommand在VM中.它就像一个魅力,我能够显着减少我们的一些代码隐藏.但是,在这样做之后,我现在质疑我这样做的决定.我的方法遵循的原则是,除非绝对需要,否则代码隐藏是错误/错误的.现在我有一点时间考虑它,我不太确定重构是最好的主意.
以下是我重构的视图的示例.我们有一个新的帐户视图,用户在该视图中输入SSN,并且必须在创建新帐户之前重新生成SSN.该视图有一个标签,显示文本以告知用户SSN和重定密钥SSN是否不匹配,并且在两者匹配之前未启用"确定"按钮.一旦SSN和重新密钥SSN匹配,标签就会消失(是的,我知道......我讨厌但我只是开发人员)并且启用了OK按钮.因此,标签的隐藏/显示以及OK按钮的启用/禁用是从TextChangedSSN中的事件和重新生成SSN文本框.最初我在代码隐藏中有逻辑来比较两个文本框值并适当地设置viewmodel属性来更新标签的可见属性和OK按钮的启用属性(是的,它们的属性绑定在XAML中).在找到这个新的工厂类之后,我用它将所有代码都推送到viewmodel中,并且视图就像没有代码隐藏之前那样工作.在成功重构视图之后,我现在第二次猜测重构的决定.
我担心的是,如果我们希望将来有不同的观点,并且新观点不希望以这种方式处理不匹配的SSN,该怎么办?也许新视图将允许用户输入不匹配的SSN,然后在单击"确定"按钮时显示错误消息.新视图是否必须接受为文本框中的每个按键执行的viewmodel中的代码额外开销?这对我来说听起来不对.我开始认为viewmodel应该包含支持视图需要但不支持视图所需的内容.该视图应该能够根据视图模型中的某些内容做出决策,但不依赖于VM来保持其权利 - 对吗?
我有一个包含WPF工具包的用户控件DataGrid.此控件用于我的应用程序中的许多不同位置.网格不知道将显示的数据类型.有没有办法最初按第一列按升序对网格进行排序,无论网格填充什么数据?我不认为我可以使用a,CollectionViewSource因为我不知道PropertyName绑定到第一列的属性.
我有一个 KendoDropDownList jsFiddle的例子
var ds = [
{label:"External Causes of Morbidity, Mortality"},
{label:"Cardiovascular"},
{label:"Circulatory System Diseases"},
{label:"Codes of Special Purposes"},
{label:"Congenital Anomalies"},
{label:"Digestive System Diseases"},
{label:"Easr and Mastoid Process Disease"},
{label:"Endocrine, Metabolic, Immunity"}];
$("#dropdownlist").kendoDropDownList({
dataTextField: 'label',
dataSource: ds
});
var ddl = $("#dropdownlist").data('kendoDropDownList').list.width("auto");
Run Code Online (Sandbox Code Playgroud)
如您所见,我将列表的宽度设置为“自动”,但列表中的第一项仍然自动换行。我认为“自动”值导致窗口适合列表中最大项目的正确大小,还是我必须找出所需的正确宽度并对宽度进行硬编码以防止自动换行?