1.页面包含多个form,共用一个model
这种做法不是很明智,而且当使用到模型验证时,就会出现相互的验证冲突,特别是服务端验证不通过,返回客户端时更是如此。
解决的方案,使用Ajax,但是此种方案第一个实现起来不容易,第二个无法充分利用MVC提供的模型验证。
2.使用iframe,页面上包含一个from,多余的form分散到iframe里面,一个ifram一个form。
这种做法可以充分利用MVC提供的模型验证功能,因为我其他页面的验证也用到了模型验证,所以为了保持风格的统一,这里使用iframe来解决问题无疑是比较符合我现有需求的解决方案。
下面是具体的做法:
这是页面中的iframe
1 <iframe src="/CRM/AddContactInAccountDetail?AccountID=<%=Model.Account.AccountID %>" width="100%" height="230px;" scrolling="no" frameborder="0"></iframe>
2
2
这是iframe中的页面:
1 <%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<Ethos.Xalent.Site.Core.DTO.EasyCrmAddContactInAccountDetailDTO>" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head id="Head1" runat="server">
6 <link href="http://www.cnblogs.com/Content/dashboard.css" rel="stylesheet" type="text/css" />
7 <link href="http://www.cnblogs.com/Content/ie.css" rel="stylesheet" type="text/css" />
8 <link href="http://www.cnblogs.com/Content/EasyCrm.css" rel="stylesheet" type="text/css" />
9 <link href="http://www.cnblogs.com/Content/Site.css" rel="stylesheet" type="text/css" />
10 <script src="/Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
11 <script src="/Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>
12 <script src="/Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
13 <script src="/Scripts/global.js" type="text/javascript"></script>
14 <script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
15 <script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
16 </head>
17 <body>
18 <h2>Add a Contact</h2>
19 <div class="AddContact">
20 <%Html.EnableClientValidation(); %>
21 <% using (Html.BeginForm())
22 {%>
23 <%= Html.ValidationSummary("Please clear the errors as below and try again!") %>
24 <table>
25 <tr>
26 <td class="TDField"><b>*First Name</b></td><td><%:Html.TextBoxFor(model=>model.Contact.FirstName) %><%:Html.ValidationMessageFor(model => model.Contact.FirstName, "*")%></td>
27 <td class="TDField"><b>*Last Name</b></td><td><%= Html.TextBoxFor(model => model.Contact.LastName)%><%:Html.ValidationMessageFor(model => model.Contact.LastName, "*")%></td>
28 </tr>
29 <tr>
30 <td class="TDField"><b>*Email</b></td><td><%:Html.TextBoxFor(model => model.Contact.Email)%><%:Html.ValidationMessageFor(model => model.Contact.Email, "*")%></td>
31 <td class="TDField"><b>Skype</b></td><td><%:Html.TextBoxFor(model => model.Contact.Skype)%></td>
32 </tr>
33 <tr>
34
35 <td class="TDField"><b>Phone Number</b></td><td><%:Html.TextBoxFor(model => model.Contact.PhoneNumber)%></td><td colspan=2></td>
36 </tr>
37 <tr><td colspan="4" style="text-align:right"><input type="submit" value="Save" class="update" /> </td></tr>
38 </table>
39 <%=Html.HiddenFor(model=>model.AccountID) %>
40 <%=Html.HiddenFor(model=>model.Name) %>
41 <%} %>
42 </div>
43 <br />
44 </body>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head id="Head1" runat="server">
6 <link href="http://www.cnblogs.com/Content/dashboard.css" rel="stylesheet" type="text/css" />
7 <link href="http://www.cnblogs.com/Content/ie.css" rel="stylesheet" type="text/css" />
8 <link href="http://www.cnblogs.com/Content/EasyCrm.css" rel="stylesheet" type="text/css" />
9 <link href="http://www.cnblogs.com/Content/Site.css" rel="stylesheet" type="text/css" />
10 <script src="/Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
11 <script src="/Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>
12 <script src="/Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
13 <script src="/Scripts/global.js" type="text/javascript"></script>
14 <script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
15 <script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
16 </head>
17 <body>
18 <h2>Add a Contact</h2>
19 <div class="AddContact">
20 <%Html.EnableClientValidation(); %>
21 <% using (Html.BeginForm())
22 {%>
23 <%= Html.ValidationSummary("Please clear the errors as below and try again!") %>
24 <table>
25 <tr>
26 <td class="TDField"><b>*First Name</b></td><td><%:Html.TextBoxFor(model=>model.Contact.FirstName) %><%:Html.ValidationMessageFor(model => model.Contact.FirstName, "*")%></td>
27 <td class="TDField"><b>*Last Name</b></td><td><%= Html.TextBoxFor(model => model.Contact.LastName)%><%:Html.ValidationMessageFor(model => model.Contact.LastName, "*")%></td>
28 </tr>
29 <tr>
30 <td class="TDField"><b>*Email</b></td><td><%:Html.TextBoxFor(model => model.Contact.Email)%><%:Html.ValidationMessageFor(model => model.Contact.Email, "*")%></td>
31 <td class="TDField"><b>Skype</b></td><td><%:Html.TextBoxFor(model => model.Contact.Skype)%></td>
32 </tr>
33 <tr>
34
35 <td class="TDField"><b>Phone Number</b></td><td><%:Html.TextBoxFor(model => model.Contact.PhoneNumber)%></td><td colspan=2></td>
36 </tr>
37 <tr><td colspan="4" style="text-align:right"><input type="submit" value="Save" class="update" /> </td></tr>
38 </table>
39 <%=Html.HiddenFor(model=>model.AccountID) %>
40 <%=Html.HiddenFor(model=>model.Name) %>
41 <%} %>
42 </div>
43 <br />
44 </body>