我不得不承認,從Web窗體到MVC的過渡實際上正在讓我迷失。我似乎無法將MVC的功能與Web窗體的功能相提並論,並且在嘗試執行看起來很簡單的任務時,我會繼續在障礙後碰到障礙。將這個與javascript/jquery的基本知識結合起來,而且我大多數時間都在撓撓我的腦海。局部視圖中的聯繫表格
我一直在努力將我公司從Web Forms構建的自定義CMS過渡到MVC。該CMS允許創建頁面和操作網站導航,從而創建頁面模型以及相關的視圖和控制器。
雖然客戶端可以編輯99%的網站,但某些元素是靜態的,並在特定頁面上按需加載。例如,聯繫人頁面存在於CMS內,但該站點按需要注入實際聯繫表單。
在Web窗體中構建時,此聯繫人窗體只是一個用戶控件,具有用於處理回發的自己的邏輯。我認爲這裏的邏輯轉換應該是創建一個局部視圖,但是我完成這項任務遇到了很多困難。雖然我已經能夠創建此聯繫表單的模型,視圖和控制器,但我似乎無法使其正常工作。
經過3天的堆棧溢出求教之後,我完成了幾乎所有的工作。但是,我無法弄清楚如何從部分視圖執行看似簡單的重定向來挽救我的生命。我嘗試了很多方法,包括Doug.Instance中描述的方法,但沒有任何運氣。在發佈後,即使控制器使用「返回PartialView」,部分視圖也將作爲整個視圖返回。如果我再次發佈它,它將以原始顯示的形式返回,作爲局部視圖。此外,我的Redirect
變量未成功更新,並且OnSuccess
javascript未觸發。
以下是我的代碼。請幫助我,因爲我跑出來的頭髮...
頁視圖(縮短爲簡潔起見)
...
@if (Model.ID == 8)
{
//LOAD CONTACT FORM
@Html.Action("Contact","ContactForm")
}...
聯繫表的局部視圖(縮短爲簡潔起見)
@model NCOWW.Models.ContactForm
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script type="text/javascript">
// Labels over the inputs.
window.addEvent("load", function() {
var myForm = document.id('contactForm');
myForm.getElements('[type=text], textarea').each(function (el) {
new OverText(el);
});
});
function FormComplete() {
if ($("#Redirect").val() != '') {
document.location = $("#Redirect").val();
}
}
</script>
@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "contactForm", OnSuccess = "FormComplete" }))
{
@Html.ValidationSummary(true)
<div id="contactForm">
@Html.HiddenFor(model => model.Redirect)
@Html.TextBoxFor(model => model.Name, new { tabindex = 1, @class = "half", Title = @Html.DisplayNameFor(model => model.Name) })
@Html.ValidationMessageFor(model => model.Name)
@Html.TextAreaFor(model => model.Comments, new { tabindex = 13, Title = @Html.DisplayNameFor(model => model.Comments) })
@Html.ValidationMessageFor(model => model.Comments)
<br />
<input type="submit" value="Submit" name="Submit" class="button" />
</div>
}
聯繫表格控制器(縮短了BREVITY)
public ActionResult Contact(ContactForm c)
{
try
{
MailMessage message = new MailMessage();
message.IsBodyHtml = true;
message.From = new MailAddress(c.Email);
message.Body += "<b>Name:</b> " + c.FullName + "<br/><br/>";
message.Body += "<b>Questions/Comments:</b><br> " + c.Comments;
SmtpClient client = new SmtpClient();
client.Send(message);
c.Redirect = "/formsuccess";
return PartialView("contactForm", c);
}
catch
{
return PartialView();
}
}
感謝您的注意。一旦我完成所有工作,我一直在回去處理我的捕獲。 –