【问题标题】:javascript call MVC Controller parameter always null when object field is private当对象字段为私有时,javascript调用MVC控制器参数始终为空
【发布时间】:2017-10-29 14:53:51
【问题描述】:

我使用 javascript 来调用控制器来处理一个函数。 当字段设置为私有时,参数值(摘要中的名称)为空。 当字段设置为公共时,它可以工作。 是设置为public的唯一方法吗?或者有更好的方法吗? 提前致谢。

我的对象

[DataContract]
public class Summary
{
 [DataMember]
 public int id { private set; get; }
 [DataMember]
 public string name { private set; get; }

 public summary() {}

 public summary(int id, string name)
 {
   id = id;
   name = name;
 }

}

MVC 控制器

public ActionResult SetSummary(Summary summary)
 {
    string anme = summary.name; **<-- null if private**
    ...
 }

Javascript

$http.post("MyController/SetSummary", JSON.stringify({
            summary: mySummaryObject}))
        .success(function (data, status, headers, config) {
    ....
    }

【问题讨论】:

  • 是的,它必须是publicDefaultModelBinder 初始化模型的一个实例,然后设置它的属性 - 除非它的 public,否则它不能设置它)

标签: javascript asp.net-mvc parameters controller private


【解决方案1】:

是的,它应该是公开的,因为 defaultmodelbinder 将浏览器请求映射到数据对象。此类提供模型绑定器的具体实现。

DefaultModelBinder 类将以下类型的对象映射到浏览器请求:

原始类型,例如 String 、 Double、 Decimal 或 DateTime 对象。

模型类,例如 Person、Address 或 Product。

集合,例如 ICollection、IList 或 IDictionary。

来源:https://msdn.microsoft.com/en-us/library/system.web.mvc.defaultmodelbinder(v=vs.118).aspx

希望有用,请告诉我您的想法或反馈

谢谢

卡提克

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多