如何使用具有不同值的按钮使用jQuery对话框提交

时间:2009-08-19 20:06:38

标签: asp.net-mvc model-view-controller jquery-ui

我想使用jQuery的对话框替换我现在在ASP.NET MVC应用程序中使用的一些代码。旧代码使用具有不同“值”设置的“提交”按钮。我还想知道是否有更好的方法。

这是视图中现有代码的示例:

        <%using (Html.BeginForm("SubmitValue", "MyController", FormMethod.Post))
    { %>
        <span class="field-description">My Value:  </span>
        <input id="myTextValue" maxlength="6" name="myValue" type="text"/>
        <%=Html.Hidden("myModel.myProperty1", Model.PropertyValue1) %>
        <%=Html.Hidden("myModel.myProperty2", Model.PropertyValue2) %>
        <div class="pageaction button">
             <strong>
                 <input name="submitButton" type="submit" value="Save"/>
            </strong>
            <strong>
                <input name="submitButton" type="submit" value="Delete"/>
            </strong>
            <strong>
                <input type="button" value="Cancel" />
            </strong>
         </div>
    <% } %>

控制器需要按下提交按钮的值:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SubmitValue(MyModel model, string submitButton)
    {
        _request.myProperty1= model.PropertyValue1;
        _request.myProperty2= model.PropertyValue2;
        if (submitButton == "Save")
        {_myService.UpdateValue(_request);}
        else
        {_myService.DeleteValue(_request);}

        return View("MyView", _request);
    }

对于jQuery UI,我想使用代码的“按钮”部分来处理提交值。

$(function() {
$("#dialogWindow").dialog({
    bgiframe: true,
    autoOpen: false,
    height: 200,
    modal: true,
    open: function(e, ui) {            
        $("#dialogWindow :input[name='myValue']").val(currentValue);
    },
    buttons: {
        'Save': function() {
            // TODO: submit as if a submit button with the value 'Save' is used
            $(this).dialog('close');
        },
        'Delete': function() {
            // TODO: submit as if a submit button with the value 'Delete' is used
            $(this).dialog('close');
        },

        Cancel: function() {
            $(this).dialog('close');
        }
    },
    close: function() {
        //close code
    }
});

});

1 个答案:

答案 0 :(得分:0)

我刚刚对您的问题进行了简短的扫描,而我认为您要做的事情是可行的,我认为这不是正确的方法。

整个想法应该是分离关注点。我认为如果你开始将Bundeling功能集成到一个动作中,那么这个动作就有可能变得拥挤而难以维护。

我认为你应该尝试更多地使用每个提交按钮调用自己的jQuery ActionResult的模型。然后,这会导致关注点的分离,使ActionResult保持整洁,并使代码整洁。

没有理由为什么你不能从动作结果中调用另一个封装所有提交按钮动作的方法,但是然后你又回到黑暗的路径上去杂乱。

另外我只是注意到你的对话窗口正在做很多事情,它也有可能变得混乱。我,这只是个人观点,宁愿有三个对话窗口,每个窗口都做自己的事情。我有我的css设置,所以有一个变化反映了所有这些。然后每个对话框都会对自己的ActionResult发布一个帖子。

如果我的问题出现了可怕的错误,请告诉我,我会尽力提供帮助。