0

我正在使用带有 jquery 1.8.3 和 jquery-ui 1.9.2 的 asp.net mvc 4 VB.NET,正如标题所示:我对控制器的 jquery 回调给了我空模型。该函数确实被调用,但没有设置我的模型的属性。这是场景:我有一个无序列表,里面有几个 li。当我点击 li 时,我从 li 的隐藏字段中获取值。这个值是我试图传递的模型。在控制器中的操作中,我使用提供的模型设置部分视图并将其返回。然后我用返回的部分视图覆盖一个 div 以完成我的 jquery 脚本。

这是代码:

带有列表的 HTML div

<div class="listContainer">
            <ul>
                @For Each attachment As EPower.eSuite.Model.DTO.HRCore.Attachment In Model.Documents
                    @<li>
                        <input type="hidden" value="@attachment" class="test" />
                        <a href="#">
                            <span class="title">@attachment.Filename</span>
                            <span class="description">@attachment.Tag.ID</span>
                        </a>
                    </li>
                Next
            </ul>
        </div>

jQuery函数:

$('.listContainer ul li').on('click', function () {
            var jsonModel = $(this).children('input.test').val();
            $.ajax({
                type: "POST",
                url: '@Url.Action("SetPersonalDocumentPartial", "WhoIsWho")',
                data: JSON.stringify(jsonModel),
                dataType: 'json',
                contentType: 'application/json',
                error: function (t) {
                    $('.personalDocumentContent').html(t.responseText);
                },
                success: function (result) {
                    $('.personalDocumentContent').html(result);
                }
            });
        });

MVC 控制器动作:

<HttpPost> _
        Public Function SetPersonalDocumentPartial(ByVal attachment As Model.DTO.HRCore.Attachment) As ActionResult
            Return PartialView("_ViewPersonalDocumentPartial", attachment)
        End Function

当前工作的事情:我的函数成功调用了我的 MVC 操作,但未设置模型属性。将控制器中的模型设置为设定值时,我得到了部分返回,它成功地覆盖了我的 div。出于某种原因,它会出现错误。

我希望我们可以一起解决!

4

1 回答 1

2

.val()方法返回一个字符串。当你JSON.stringify猜一个字符串时,你会得到什么?是的,你猜对了:一个字符串。例如:JSON.stringify('foobar')给你'foobar'. 并且发送foobar到您的控制器肌动蛋白根本对模型绑定器没有帮助。

如果您希望模型绑定器能够从请求中绑定模型,请确保您已包含要在请求中绑定的此模型的所有属性:

data: JSON.stringify({ filename: $(this).children('input.test').val() })

这将设置FileName您的Model.DTO.HRCore.Attachment. 如果您有其他属性,请确保也包括它们:

data: JSON.stringify({ 
    filename: $(this).children('input.test').val(),
    someOtherProperty: 'some other value'
})
于 2013-01-22T10:55:30.570 回答