我有這個頁面,其中包含2個窗體一個存在於佈局文件中,另一個存在於視圖文件中。第一種形式是通訊訂閱(ajax形式),它的位置在頁面的頁腳中很常見,這就是它在佈局中並呈現爲局部視圖的原因。我有另一種聯繫我們頁面的視圖,它有自己的形式(普通形式)。 我的問題是,當我提交聯繫我們表單時,代碼也進入訂閱表單的操作方法,並返回一個模型錯誤與JsonResult導致整個視圖呈現爲文本。我只想要執行聯繫我們表單的操作方法。如何在asp.net mvc視圖中只執行一個表單動作方法?
這裏是一個局部視圖文件
@model MyApp.Models.Subscriber
@using (Ajax.BeginForm("NewsletterSubscription", "Shared", null, new AjaxOptions
{
HttpMethod = "POST",
OnBegin = "OnBegin",
OnComplete = "OnComplete",
OnFailure = "OnFailure"
}, new { id = "subscribeForm" }))
{
@Html.AntiForgeryToken()
@Html.TextBoxFor(model => model.SubscriptionEmail)
@Html.ValidationMessageFor(model => model.SubscriptionEmail)
<input id="btnSubscribe" type="submit" value="Subscribe" />
}
的認購表格,這是它是如何在_layout.cshtml文件中呈現
@{ Html.RenderAction("NewsletterSubscription", "Shared"); }
下面是聯繫我們的視圖文件的其他形式的
@using (Html.BeginForm("Index", "Contact", FormMethod.Post, new { id = "contactForm" }))
{
@Html.AntiForgeryToken()
<div class="theForm">
<div class="theFormUnit">
<p>Fullname</p>
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="theFormUnit">
<p>Email</p>
@Html.TextBoxFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="theFormUnit">
<p>Phone</p>
@Html.TextBoxFor(model => model.Phone)
@Html.ValidationMessageFor(model => model.Phone)
</div>
<div class="theFormUnit">
<p>Message</p>
@Html.TextAreaFor(model => model.Message)
@Html.ValidationMessageFor(model => model.Message)
</div>
<input type="submit" value="Submit" />
</div>
}
當我調試代碼時,首先聯繫我們的action方法是執行d然後是訂閱的操作方法,並返回錯誤,因爲沒有提供電子郵件。
訂閱操作方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult NewsletterSubscription(Subscriber subscriber)
{
if (ModelState.IsValid)
{
}
else
{
return Json(new { success = false, message = "Failure Message" });
}
return Json(new { success = true, message = "Success Message"});
}
和我們聯繫的操作方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(ContactViewModel contact)
{
if(ModelState.IsValid)
{
}
else
{
}
return View(contact);
}
你確定的佈局形式不渲染您聯繫形式?首先檢查頁面的視圖源以確保表單不嵌套。 – 2015-02-08 15:26:05
我已經檢查過,表單不是嵌套的,這兩個表單都正確呈現與其他html元素之間。 – Yasmine 2015-02-08 15:38:00
在這種情況下,可能有些JavaScript正在這樣做。你是否在任何js中使用這些表單元素,因爲你給它們分開了id? – 2015-02-08 15:47:07