ID在类型剃刀视图中呈现为空

时间:2011-04-19 18:00:33

标签: asp.net-mvc asp.net-mvc-3 jquery razor viewmodel

这真的很奇怪,出于某种原因,ViewModel的Id在视图中呈现为null。我调试了应用程序并检查了视图模型实际上是否正确映射(使用AutoMapper),一切都很好。但是当我做@ Model.Id时,它呈现为零,当我使用jQuery警告值时,我得到“null”。那是怎么回事?

            <div id="commentBox">
                @using (Html.BeginForm("Comment", "Item", new { itemId = Model.Id  } ))
                {
                    <span class="greenText">answer</span>
                    <span id="hiddenForId">@this.Hidden(x => x.Id).Id("idPlaceHolder")</span>
                    <span id="commentInputBox">@this.TextBox(x=>x.CommentText).Id("commentField")</span>
                    <span id="commentButton">@this.SubmitButton("").Id("commentSubmit").Class("okButton")</span>
                }
            </div>

        <div style="clear:both"></div>
    </div> 
</div>

<script type="text/javascript">
    $(function () {
        alert($("idPlaceHolder").html());
        $("#commentSubmit").click(function () {
            var dataObj = { 'commentText': $("#commentField").val(), 'itemId': $("idPlaceHolder").html() }
            $.ajax({
                url: '/Item/Comment',
                data: dataObj,
                type: 'POST',
                success: function (result) {
                    if (result.redirectTo != null && result.redirectTo != '') {
                        window.location.href = result.redirectTo;
                    } else {
                        alert(result.error);
                    }
                }
            });
            return false;
        });
    });
</script>
P.S:在附注中,你如何告诉表格它不需要发布并且它已被照顾?我只是记不起来......这绝对不是return false;

3 个答案:

答案 0 :(得分:0)

部分答案:如果您在表单的onsubmit事件上返回false,则会阻止表单提交。

答案 1 :(得分:0)

在显示视图之前 - 模型确实有ID值,对吗?在这种情况下这是在一个帖子?如果是这样 - 如果存在问题且您重新显示表单而没有重定向MVC会假定错误,它将使用发布值中的内容来回写 - 假设您正在创建新记录并且注释ID最初为null。如果在发布/重新显示期间不存在,则此答案不适用。

答案 2 :(得分:0)

好的,我终于弄清楚出了什么问题:

$(function () {
    alert($("#idPlaceHolder").val());
    $("#commentSubmit").click(function () {
        var dataObj = { 'commentText': $("#commentField").val(), 'itemId': $("#idPlaceHolder").val() }

我使用$("idPlaceHolder").html()代替$("#idPlaceHolder").val() ...语法错误!