【问题标题】:Why the MVC controller action not receiving model object with correct values?为什么 MVC 控制器操作没有接收到具有正确值的模型对象?
【发布时间】:2014-03-06 06:10:24
【问题描述】:

我看到我的控制器操作正确获取了 id 参数。 URL 正确,因为它触发了操作。

即使我从 js 函数发送完全填充的模型对象,模型的所有字段都设置为 null。

为什么控制器没有通过我传递的值获取模型对象?

发送请求的JS函数:

function updateSettings(){
        //read values from the form                
                var name = $name_from_page;
                var msg = $msg_from_page;
                var abt = $abt_from_page;
                var bg = $BG_from_page;

                var webLinks = [];
                var text = "";
                var url = "";
                for(var i=1; i <= 4; i++)
                {
                    text = $text_from_page;
                    url = $url_from_page;                             
                webLinks.push({ Text: text, URL: url });
                }      
            var allowLikes = $allowLikes_from_page;
                var allowComments = $allowComments_from_page;

                var model = {};
                model.Title = name;
                model.Message = msg;
                model.About = abt;
                model.BannerBGColor = bg;
                model.BannerBGImage = "";
                model.AllowComments = allowLikes;
                model.AllowLikes = allowComments;
                model.WebLinks = webLinks;

            //using js library to send request
                Requestor
                .post("Update_Page_URL")
                .addParams({ model: model })
                .send();
}

这是传递给控制器​​动作的内容:

{"Title":"Bob","Message":"Message","About":"About Bob","BannerBGColor":"#eee;","BannerBGImage":"","AllowComments":true,"AllowLikes":false,"WebLinks":[{"Text":"abc","URL":"www.abc.com"}]}

控制器动作:

[HttpPost]
public ActionResult UpdateSettings(string id, PageModel model)
{
  //read model and update database
  //model object has all fields null and the 2 booleans are false <<== ISSUE
}

控制器动作中使用的模型:

public class PageModel
    {
        public string UserName { get; set; }

        public string Title { get; set; }

        public string Message { get; set; }

        public string About { get; set; }

        public string BannerBGColor { get; set; }

        public string BannerBGImage { get; set; }

        public bool AllowComments { get; set; }

        public bool AllowLikes { get; set; }

        public List<WebLink> WebLinks { get; set; }        

    }

【问题讨论】:

  • 看到这个问题,看起来和你的很像:stackoverflow.com/questions/10110482/…
  • 看起来更近...会尝试。谢谢
  • 我检查过了。我的代码正在做与 Darrin 在解决方案中建议的相同的事情。我测试了我通过的json。这是一个有效的 json。但我的控制器对象仍然有空值......
  • 但是你也有一个 id 参数可能会混淆它。尝试将 id 放入 JSON 中?

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

您的操作需要 JSON,但您也有一个字符串 id 参数。将 id 移入 JSON 并记住设置您的内容类型:

dataType: 'json',
contentType: 'application/json',

【讨论】:

  • 问题出在我使用的库中。现在似乎已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
相关资源
最近更新 更多