该参数string[] orderTypeNames将为null.
mvc行动
public PartialViewResult EditMultipleOrderStates(
string[] orderTypeNames,
int[] orderIds)
Run Code Online (Sandbox Code Playgroud)
JavaScript的
$('#edit-mulitple-order-states-button').click(function () {
ids = [];
types = [];
$checked = $('.order-queue-order input:checked');
$orders = $checked.closest('.order-queue-order');
$orders.each(function (index, elem) {
$order = $(elem);
ids.push($order.attr("orderId"));
types.push($order.attr("orderType"));
});
data = {
orderIds: ids,
orderTypeNames: types
};
$.post('EditMultipleOrderStates', data, function (response) {
//...
});
});
Run Code Online (Sandbox Code Playgroud)
小提琴手

orderIds%5B%5D=97&orderIds%5B%5D=98&orderIds%5B%5D=93&orderTypeNames%5B%5D=DeliveryOrder&orderTypeNames%5B%5D=DeliveryOrder&orderTypeNames%5B%5D=DeliveryOrder
Run Code Online (Sandbox Code Playgroud)
是方括号导致问题吗?我怎样才能绑定到这些数组?
编辑:我在同一时间手动构建查询字符串.
query = "";
for each...
query += "orderIds=" + $order.attr("orderId") + "&";
query += "orderTypeNames=" + $order.attr("orderType") + "&";
Run Code Online (Sandbox Code Playgroud) 你能在Nancy有多个自定义模型绑定器吗?我需要绑定来自datatables jQuery插件的服务器端处理请求,这不适合我们当前的"mvc样式"自定义模型绑定器.特别是关于列表,数据表将它们表示为mylist_0,mylist_1等而不是mylist [0],mylist [1].
那么我可以添加另一个模型绑定器来处理这些不同的列表样式,如果我这样做,南希怎么知道使用哪一个?
在MVC 3中,我通过创建一个实现的新类来创建自定义模型绑定器Systen.Web.Mvc.IModelBinder,然后在内部Global.asax.cs和内部Application_Start()使用注册ModelBinders.Binders.Add(typeof(sometype), new MyModelBinder());
在MVC 4中,我理解您应该使用它System.Web.Http.ModelBinding.IModelBinder来实现模型绑定器.
所以我有两个问题:
为什么我们应该使用模型绑定器System.Web.Http.ModelBinding而不是来自Systen.Web.Mvc?我没有看到它在任何地方被列为已弃用,那么旧版本的问题是什么?
如果我从中实现我的模型绑定器System.Web.Http.ModelBinding.IModelBinder,如何在我的应用程序中注册它以便实际使用它?
我希望我的模型绑定不区分大小写。
我尝试操作从 继承的自定义模型绑定器System.web.Mvc.DefaultModelBinder,但我不知道在哪里添加不区分大小写的内容。
我也看了看IValueProvider,但我不想重新发明轮子并自己找到值。
任何的想法 ?
asp.net-mvc model-binding custom-model-binder value-provider asp.net-mvc-4
I\xc2\xb4m 使用 CalendarDatePicker
\n\n<CalendarDatePicker x:Name="DatePick" DisplayMode="Decade" Date="{Binding DisplayValue, Mode=TwoWay}"/>\nRun Code Online (Sandbox Code Playgroud)\n\n问题是当我绑定日期属性时,选择器不再显示默认占位符文本(选择日期),而是如果属性为 null(属性始终设置为 null),则现在显示 01.01.1916。
\n\npublic DateTimeOffset? DisplayValue {get;set;}\nRun Code Online (Sandbox Code Playgroud)\n\n如果我手动将 null 作为 Date 的值,它现在会再次显示 PlaceholderText。
\n\nDatePick.Date=null;\nRun Code Online (Sandbox Code Playgroud)\n\n并且绑定仍然有效/我在选择日期时得到了所需的值。\n那么是否有可能在不使用隐藏代码的情况下显示占位符文本?
\n我正在 .NET Core 1.1(完整框架)应用程序中创建 IModelBinder 的自定义实现。
我有一个ActivityModel具有接口属性的类:
public class ActivityModel
{
public int Id { get; set; }
public string Title { get; set; }
public int Type { get; set; }
public IActivityContent Content { get; set; } // marker interface
//more unimportant props
}
Run Code Online (Sandbox Code Playgroud)
这个想法是客户端可以发送带有Content属性的对象,该属性可以是许多(当前为 8 个,但可能会增加)不同类之一。
通过这种方式,我们可以在 API 中拥有一个端点(针对每个 CRUD 操作)来处理所有这些不同类型的对象。
我正在实现一个 ModelBinder 来将从客户端发送的对象变成一个具体的类,这是我到目前为止所得到的:
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
var content = bindingContext.ValueProvider.GetValue("content");
return …Run Code Online (Sandbox Code Playgroud) 我在为 ASP.NET Core 2.1 Web API 服务编写自定义模型绑定程序时遇到问题。我有一个如下的操作方法
public async Task<IActionResult> SaveAccountEvents([FromRoute] Guid accountId, IList<AccountEvent> events)
{
}
Run Code Online (Sandbox Code Playgroud)
AccountEvent 类有很多属性,包括
[BindProperty(BinderType = typeof(CustomBinding))]
public string EventBody { get; set; }
Run Code Online (Sandbox Code Playgroud)
目的是我希望来自客户端的此属性的值是字符串或 JObject (JSON)。这个想法是,客户端可以发送字符串化的 JSON 或 EventBody 中的 JSON,模型会将其存储为字符串 - 最终作为字符串化的 JSON。
我遇到的问题是在我的自定义绑定中,bindingContext.ValueProvider.GetValue永远不会返回任何内容。查看该属性,它只包含一个RouteValueProvider. 我看不出有什么方法可以从身体中获取价值。是否有其他方法可以在 ASP.NET Core Web API 中自定义 JSON 反序列化?
更新:
客户端使用此 API 发送事件数据。事件数据由一个信封组成,其中包含事件名称、发送日期、发起事件的用户等内容。在当前版本中,实际事件数据以字符串化 JSON 形式发送。所以现在,请求看起来像这样(注意事件主体是一个字符串):
{
"eventDate": "20180909",
"eventBody": "{
\"newLastName\": \"bob\",
\"primaryApplication\": \"bob\"
}"
}
Run Code Online (Sandbox Code Playgroud)
变化是我希望能够接受 JSON 格式的事件主体。在这种情况下,客户端应该能够发送(请注意,事件正文是正确的 JSON):
{
"eventDate": "20180909",
"eventBody": {
"newLastName": …Run Code Online (Sandbox Code Playgroud) c# model-binding json-deserialization asp.net-core asp.net-core-webapi
我一直在尝试弄清楚如何将自定义模型绑定与 .net Core 2 Web api 结合使用,但未能使其正常工作。
我已经阅读了一些文章,如下 http://www.palmmedia.de/Blog/2018/5/13/aspnet-core-model-binding-of-abstract-classes Asp net core rc2。抽象类模型绑定
就我而言,bindingContext.ModelName始终为空。有人能解释为什么会这样吗?
下面的示例实现
控制器
public IActionResult SomeAction([ModelBinder(BinderType = typeof(BlahTypeModelBinder))][FromBody]TheBaseClass theBase)
{
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
楷模
public abstract class TheBaseClass
{
public abstract int WhatType { get; }
}
public class A : TheBaseClass
{
public override int WhatType { get { return 1; } }
}
public class B : TheBaseClass
{
public override int WhatType { get { return 2; } }
}
Run Code Online (Sandbox Code Playgroud)
提供者
public …Run Code Online (Sandbox Code Playgroud) 我在路由中提供了一个 ID(“.../api/mobile/registers/192” - 192 是 ID),并在 PUT 请求正文中提供了其余参数。如何将它们绑定到具有所有参数的模型?问题是ID没有映射,它总是0:
\n[HttpPut("registers/{id}")]\npublic async Task ModifyPaymentRegister(PaymentRegisterModifyRequestVm model)\n{\n var result = await financeService.ModifyPaymentRegisterAsync(model, CurrentUserId.Value);\n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n [BindProperties(SupportsGet = true)]\n public class PaymentRegisterModifyRequestVm\n {\n /// <summary>\n /// \xd0\x98\xd0\xb4\xd0\xb5\xd0\xbd\xd1\x82\xd0\xb8\xd1\x84\xd0\xb8\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd1\x80 \xd1\x80\xd0\xb5\xd0\xb5\xd1\x81\xd1\x82\xd1\x80\xd0\xb0\n /// </summary>\n [FromRoute]\n public int Id { get; set; }\n\n /// <summary>\n /// \xd0\x9e\xd0\xbf\xd0\xb8\xd1\x81\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x80\xd0\xb5\xd0\xb5\xd1\x81\xd1\x82\xd1\x80\xd0\xb0\n /// </summary>\n [FromBody]\n public string Description { get; set; }\n\n /// <summary>\n /// \xd0\xa2\xd0\xb8\xd0\xbf \xd0\xbc\xd0\xbe\xd0\xb4\xd0\xb8\xd1\x84\xd0\xb8\xd0\xba\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8 \xd1\x80\xd0\xb5\xd0\xb5\xd1\x81\xd1\x82\xd1\x80\xd0\xb0\n /// </summary>\n [FromBody]\n public PaymentModifyType ModifyType { get; set; }\n }\nRun Code Online (Sandbox Code Playgroud)\n 我有一个第三方专有应用程序,我需要在 ASP.NET Core 5.0 Web API 应用程序中为其编写一个 API 端点。
第三方应用程序发出 HTTP post 请求,请求正文中仅包含二进制数据,以及内容类型application/x-www-form-urlencoded,或者有时application/octet-stream(有点随机,但数据相同)。
我的动作处理程序如下所示:
[Route("~/Validation")]
[ApiController]
public class ValidationController : ControllerBase
{
[HttpPost("{requestId}")]
[Consumes(@"application/octet-stream", @"application/x-www-form-urlencoded")]
[Produces(@"application/octet-stream")]
public async Task<IActionResult> Validation_Post([FromRoute] string requestId)
{
byte[] rawRequestBody = Array.Empty<byte>();
{
long streamInitialPos = 0;
if (Request.Body.CanSeek) // rewind for this read.
{
streamInitialPos = Request.Body.Position;
Request.Body.Seek(0, SeekOrigin.Begin);
}
using (var ms = new MemoryStream())
{
await Request.Body.CopyToAsync(ms);
rawRequestBody = ms.ToArray() ?? throw new NullReferenceException();
}
if (Request.Body.CanSeek) // …Run Code Online (Sandbox Code Playgroud) c# model-binding asp.net-core asp.net-core-webapi asp.net-core-5.0
model-binding ×10
c# ×7
asp.net-core ×4
asp.net-mvc ×4
asp.net ×1
javascript ×1
jquery ×1
nancy ×1
uwp ×1
xaml ×1