0

我是 MVC 的新手并且掌握了基本模型,但仍然使用回发等做所有事情。

我想要构建的 UI 的一个方面是有一个带有按钮的项目下拉列表,用于将项目添加到数据库并刷新列表。使用 WebForms 实现这一点很简单,因为所有内容都包含在 UpdatePanels 中,但是使用 MVC 实现这一目标的最佳方法是什么?

列表和按钮的部分标记如下所示:

<table>
    <tr>
        <td><%=Html.DropDownList("JobTitleSelectList", Model.JobTitleSelectList, "(select job title)", new { @class = "data-entry-field" })%></td>
        <td>&nbsp;</td>
        <td><a id="AddJobTitleDialogLink" href="javascript: addJobTitleDialog();" title="Add Job Title"><img id="AddJobTitleButtonImage" src="/Content/Images/Icons/16x16/PlusGrey.png" border="0" /></a></td>
    </tr>
</table>

Dialog 是一个标准的 jquery Ui 对话框,如下所示:

<div id="SingleTextEntryDialog" style="display:none">
        <table>
            <tr>
                <td>Name:</td>
                <td><input id="SingleTextEntryDialogText" type="text" size="25" /></td>
            </tr>
        </table>
    </div>

我猜我需要把它放到 UserControl / PartialView 中(它们是一样的吗?)还有强类型视图我如何将模型或 SelectList 属性传递给 UserControl 或者不是这样吗?

不确定对话框 div 中是否应该有表单?或者如何通过 ajax 回发。

一些示例在页面中显示了很多 ajax 代码,例如:$.ajax({...}); 我假设使用 jquery 执行此操作的代码比 asp.net webforms 更多,但是在页面上执行“查看源代码”的代码更多?

您的意见表示赞赏。

4

1 回答 1

1

单击按钮后,您可以使用 AJAX 或执行整个页面重新加载。在麻烦的情况下,您的页面上可能有两个表单:第一个表单将包含允许用户选择元素的下拉列表,第二个表单将包含一个输入字段和添加按钮。两种形式都将发布到您的控制器上的不同操作。

如果您决定不使用 AJAX,请按照以下步骤操作。添加一个包含职位选择的表单:

<div id="selectjobcontainer">
<% using (Html.BeginForm("selectjob", "home")) { %>
    <%= Html.DropDownList("JobTitleSelectList", Model.JobTitleSelectList) %>
    <input type="submit" value="Select job title" />
<% } %>
</div>

添加另一个表单,允许用户将职位添加到列表中:

<div id="addjobcontainer">
<% using (Html.BeginForm("addjob", "home")) { %>
    <%= Html.TextBox("JobTitle") %>
    <input type="submit" value="add job title" />
<% } %>
</div>

AddJob操作应将职位名称添加到模型并呈现将更新职位下拉列表的相同视图。

如果您决定使用 AJAX 刷新下拉列表,则该AddJob操作应返回包含第一个表单的部分视图,这意味着您需要将其代码放入一个单独的ascx控件中,然后将其包含在主视图中。

剩下的就是使用jQuery 表单插件对第二个表单进行 ajaxify:

$(function() {
    $('#addjobcontainer form').ajaxForm({
        success: function(html) {
            $('#selectjobcontainer').html(html);
        }
    });
});
于 2010-03-25T10:58:46.213 回答