标签: model-binding

MVC模型从jQuery post绑定一个字符串数组

该参数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)

javascript c# asp.net-mvc jquery model-binding

6
推荐指数
1
解决办法
4314
查看次数

南希的多个自定义模型粘合剂

你能在Nancy有多个自定义模型绑定器吗?我需要绑定来自datatables jQuery插件的服务器端处理请求,这不适合我们当前的"mvc样式"自定义模型绑定器.特别是关于列表,数据表将它们表示为mylist_0,mylist_1等而不是mylist [0],mylist [1].

那么我可以添加另一个模型绑定器来处理这些不同的列表样式,如果我这样做,南希怎么知道使用哪一个?

model-binding nancy

6
推荐指数
1
解决办法
2709
查看次数

在MVC 4中注册自定义模型绑定器

在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来实现模型绑定器.

所以我有两个问题:

  1. 为什么我们应该使用模型绑定器System.Web.Http.ModelBinding而不是来自Systen.Web.Mvc?我没有看到它在任何地方被列为已弃用,那么旧版本的问题是什么?

  2. 如果我从中实现我的模型绑定器System.Web.Http.ModelBinding.IModelBinder,如何在我的应用程序中注册它以便实际使用它?

asp.net-mvc model-binding asp.net-mvc-4

6
推荐指数
1
解决办法
3863
查看次数

不区分大小写的模型绑定 MVC 4

我希望我的模型绑定不区分大小写。

我尝试操作从 继承的自定义模型绑定器System.web.Mvc.DefaultModelBinder,但我不知道在哪里添加不区分大小写的内容。

我也看了看IValueProvider,但我不想重新发明轮子并自己找到值。

任何的想法 ?

asp.net-mvc model-binding custom-model-binder value-provider asp.net-mvc-4

6
推荐指数
1
解决办法
5258
查看次数

CalendarDatePicker 绑定空值

I\xc2\xb4m 使用 CalendarDatePicker

\n\n
<CalendarDatePicker x:Name="DatePick" DisplayMode="Decade" Date="{Binding DisplayValue, Mode=TwoWay}"/>\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是当我绑定日期属性时,选择器不再显示默认占位符文本(选择日期),而是如果属性为 null(属性始终设置为 null),则现在显示 01.01.1916。

\n\n
public DateTimeOffset? DisplayValue {get;set;}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我手动将 null 作为 Date 的值,它现在会再次显示 PlaceholderText。

\n\n
DatePick.Date=null;\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且绑定仍然有效/我在选择日期时得到了所需的值。\n那么是否有可能在不使用隐藏代码的情况下显示占位符文本?

\n

c# asp.net xaml model-binding uwp

6
推荐指数
1
解决办法
1963
查看次数

如何在自定义 ModelBinder 中从body获取数据?

我正在 .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)

c# asp.net-mvc model-binding asp.net-core

6
推荐指数
1
解决办法
967
查看次数

如何为主体模型上的属性提供自定义模型绑定器?

我在为 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

6
推荐指数
1
解决办法
1800
查看次数

asp.net core web api 2中的抽象类模型绑定

我一直在尝试弄清楚如何将自定义模型绑定与 .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)

c# model-binding asp.net-core-2.0

6
推荐指数
1
解决办法
4899
查看次数

将路由和正文中的多个参数绑定到 ASP.NET Core 中的模型

我在路由中提供了一个 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}\n
Run 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    }\n
Run Code Online (Sandbox Code Playgroud)\n

c# model-binding asp.net-core

6
推荐指数
1
解决办法
5872
查看次数

如何禁用特定 ASP.NET Core 5.0 Web API 操作的自动模型绑定?

我有一个第三方专有应用程序,我需要在 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

6
推荐指数
1
解决办法
4617
查看次数