为什么我的按钮没有出现?

时间:2010-09-23 13:39:47

标签: asp.net asp.net-mvc validation asp.net-mvc-2 partial-views

我有一个局部视图,我在渲染中,如果用户选择了一个选项,则允许用户自动生成某个字段的值。请看一下这张照片,了解我的意思:

alt text

这是通过在局部视图

上使用以下标记来实现的
<%= Html.LabelFor( model => model.IssueCode )%>
<br />
<% if ( Model.HasCodeGenerator ) { %>
    <%= Html.TextBoxFor( model => model.IssueCode, new { style = "width:120px;background-color:#eeeeee;border: solid 2px #dfdfdf", @readonly = "readonly" } )%>
    <% if (Model.ModelState == ModelStateEnum.Add) { %>
        <button id="codeGenerator" style="font-size: 0.7em;margin-right: 10px">Genera codice fascicolo</button>
    <% } %>
<% } else { %>
    <%= Html.TextBoxFor(model => model.IssueCode, new { style="width: 120px" })%>
<% } %>
<%= Html.ValidationMessageFor(model => model.IssueCode, "*")%>

正如您所看到的,我总是在输入字段的末尾添加一个Html.ValidationMessageFor(),并在视图的末尾附加一个ValidationSummary aut。

当用户提交表单时,该操作执行的第一个代码块如下

if ( !ModelState.IsValid ) {
    //Invalid - redisplay form with errors
    return PartialView( "IssueCodeGenerator", model );
}

这是我在所有这三种情况下得到的结果

alt text

为什么按钮的标记代码会消失?

感谢您的帮助!

第一次编辑

验证后,IssueCode文本框松开了readonly =“readonly”属性。这意味着我认为第一个条件不符合......

第二次编辑:

根据达林的评论,我包括

  1. 显示部分视图的操作
  2. 部分的摘录,显示ModelState变量在表单
  3. 中保留为隐藏控件
  4. 由Partial
  5. 调用的控制器Action
  6. 提交部分
  7. 的jQuery代码

    1 - 这是显示部分

    的动作
    [HttpGet]
    public ActionResult Create()
    {
        IssueModel im = new IssueModel()
        {
            ModelState = ModelStateEnum.Add,
            FirmID = _firmManager.GetMyFirmID(),
            CreatedDate = DateTime.Now,
            LastUpdateDate = DateTime.Now,
            HasCodeGenerator = _optionManager.HasIssueCodeGenerator()
        };
        return PartialView("Issue", im);
    }
    

    2 - 部分Issue.ascx

    的摘录
    <% using (Html.BeginForm("SaveOrDelete", "Issue", FormMethod.Post, new { id = "crudForm" })) { %>
        <%= Html.HiddenFor(model => model.FirmID) %>
        <%= Html.HiddenFor(model => model.IssueID) %>
        <%= Html.HiddenFor(model => model.ModelState) %>
    

    3 - 这是在提交表单时调用的控制器操作

    [HttpPost]
    public ActionResult SaveOrDelete( IssueModel model ) {
        if ( !ModelState.IsValid ) {
            //Invalid - redisplay form with errors
            return PartialView( "Issue", model );
        }
    
        try {
            Issue i = null;
            if ( model.ModelState == ModelStateEnum.Add )
                i = new Issue();
            else
                i = _manager.FindIssueByIssueID( model.IssueID );
            if ( model.ModelState != ModelStateEnum.Delete ) {
                _manager.BindIssueModel( i, model );
                if ( model.ModelState == ModelStateEnum.Add )
                    i.FirmID = _contactManager.GetMyContact().FirmID;
                i.LastUpdateDate = DateTime.Now;
                _manager.SaveIssue( i );
            } else {
                _manager.DeleteIssue( i );
            }
            return PartialView( "ActionCompleted" );
        }
        catch ( Exception ex ) {
            return PartialView( "ActionError",
                new ActionErrorModel() { Message = ex.Message } );
        }
    }
    

    4 - 这是提交表单的jQuery代码

    $("#crudForm").submit(function(event) {
        event.preventDefault();
        $("#crudForm").block();
        $.ajax({
            type: "post",
            dataType: "html",
            url: "/Issue/SaveOrDelete",
            sync: true,
            data: $("#crudForm").serialize(),
            success: function(response) {
                $("#crudForm").parent().html('').html(response);
                $("#crudForm").unblock();
            },
            error: function(response) {
                $("#crudForm").unblock();
            }
        });
    });
    

    希望这有助于发现问题。谢谢。

1 个答案:

答案 0 :(得分:0)

因为Model.ModelState == ModelStateEnum.Add是虚假的吗?

MVC不会关闭你的按钮HTML ...


即使没有看到表格,也很清楚Darin是对的,你的Modelstate枚举设置为null。