【问题标题】:.NET MVC Controller not binding to object type.NET MVC 控制器未绑定到对象类型
【发布时间】:2016-08-31 22:13:39
【问题描述】:

非常直接的 $.post(url, data)

数据是这个对象

                 var model = {
                    applNo: pdAppNo,
                    amount: 999,
                    schldDate: new Date(),
                    userId: "corey",
                    tdcId: "234234234"
                };

调用像这样设置的 MVC 控制器

    [HttpPost]
    public JsonResult PostScheduleMakeUpPayment(object model)
    {
        //return _updateTdc.ProcessMakeUpPayment(applNo, amount, schldDate, userId, tdcId);
        return Json("Success:True");
    }

在控制器的“模型”内部,它不显示 json 数据,只显示“{object}”

所以 MVC 不允许我将 json 发布到对象类型?

【问题讨论】:

  • 为您的object 创建一个新的命名类。自动绑定需要属性名称。

标签: c# asp.net-mvc


【解决方案1】:

你需要创建命名类。

public class TestModel
{
public string applNo {get;set;}
public int amount{get;set;}
public DateTime schldDate{get;set;}
public string userId{get;set;}
public string tdcId{get;set;}
}

   [HttpPost]
    public JsonResult PostScheduleMakeUpPayment(TestModel model)
    {
        //return _updateTdc.ProcessMakeUpPayment(model.applNo, model.amount, model.schldDate, model.userId, model.tdcId);
        return Json("Success:True");
    }

【讨论】:

  • 对,我明白。我想我的问题是如何允许对象类型作为我的控制器参数?我想我可以只制作字符串的类型并检查 Json 以查看它是否会被反序列化为不同的类型。基本上我想要一种方法来控制以它们的类型发布预定付款可能并不总是相同的。
  • 如果你想问别的事情,你可以这样问。如果你想以 Json 形式返回对象,你可以这样写。 return new Json({Success:true,Message:"No Error"});您可以处理来自客户端的响应。
  • 我不是在谈论返回类型。仅参数类型..请求。我可以制作自定义模型活页夹吗?我没有找到任何可以与我的问题相关的例子。
  • @chdev77 如果你真的不能对输入施加一些结构,你可以将所有内容作为字符串而不是对象传递,然后提取 <string, string> 键值对。
【解决方案2】:

Json 字符串是键值对的集合。您可以将对象作为 json 字符串发布并使用函数将其值添加到字典中,然后在控制器函数中使用它。例如:

public static Dictionary<string,object> BinderModel(string model)
{
    Dictionary<string,JToken> result = new Dictionary<string,object>();
    JObject jObject = JObject.Parse(model);
    foreach (JProperty x in (JToken)jObject )
    {
         result.Add(x.Name,x.Value);
    }
    return result;
}

然后你的控制器功能是这样的

[HttpPost]
public JsonResult PostScheduleMakeUpPayment(string model)
{
    Dictionary<string,object> values = BinderModel(jsonString);
    //return _updateTdc.ProcessMakeUpPayment(values["applNo"], values["amount"], values["schldDate"], values["userId"], values["tdcId);
    return Json("Success:True");
}

模型值的类型取决于 ProcessMakeUpPayment 输入参数的类型。您可能需要在调用它之前或在其中进行一些转换

【讨论】:

  • 这个我也想过,但是你的js模型一定要扁平化。
【解决方案3】:

我猜 MVC 控制器上的对象类型参数不受支持/设计不佳。除了 MVC 在其视图/Razor 语法上不支持泛型类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2022-11-12
    • 2013-04-11
    相关资源
    最近更新 更多