2012-12-13 27 views
0

我是asp.net mvc的新手,我試圖爲asp.net mvc開發可重用的聯繫人表單組件。在asp.net中創建可重複使用的表單聯繫人組件mvc

我已經tryed做創建與形式的PartialView,我不知道這是更好的方法,用於創建一個可重用的組件

我PartialView是

@model MyModel.ContactData 

@using (Html.BeginForm("ContactForm", "ContactForm", FormMethod.Post)) { 
<fieldset> 
    <p> 
     @Html.LabelFor(model => model.MailAddress) 
     @Html.EditorFor(model => model.MailAddress) 
    </p> 
    <p> 
     @Html.LabelFor(model => model.Message) 
     @Html.TextAreaFor(model => model.Message) 
    </p> 
    <input type="submit" value="Save" /> 
</fieldset> 

}

問題從控制器開始,控制器是僅用於該部分視圖的特定控制器。

public class ContactFormController : Controller 
{ 
    [HttpPost] 
    public ActionResult ContactForm(ContactData contactData) 
    { 
     if (ModelState.IsValid) 
     { 
      return PartialView("MessageSend"); 
     } 

     return PartialView(); 
    } 
} 

我的問題是在某些必需的字段的情況下是空的,在這種情況下,控制器僅返回局部視圖,而不會返回它的父上下文內的partival視圖。我已經嘗試從父視圖調用PartialView作爲@ Html.Partial,@ Html.RenderAction,@ Html.RenderPartial,併發生同樣的情況。

如何返回部分視圖在其父上下文中?我已經嘗試 返回查看(ParentViewsName,contactData),但我不喜歡它,因爲在表單提交它更改/聯繫人/ ContactForm/ContactForm地址欄上的網址。

Perphaps我試圖用錯誤的方法創建一個可重用的組件?用ajax只更新PartialView更好?備擇方案?

感謝

回答

0

從我的理解,要顯示狀態消息這是一個局部視圖,用戶成功提交表單後。我認爲tempdata會適合這種情況。

public class ContactFormController : Controller 
{ 
    [HttpPost] 
    public ActionResult ContactForm(ContactData contactData) 
    { 
     if (ModelState.IsValid) 
     { 
      TempData["success"] = true;    
      return RedirectToAction("parentpage"); 
     } 

     return View(contactData); 
    } 
} 

在父頁,檢查TempData的[「成功」]是否爲空,並顯示局部視圖「MessageSend」。

+0

對不起,我沒有解釋清楚,問題是如果填寫表格時沒有提交所有必填字段。使用當前代碼提交填充爲空的表單時,只返回不帶父級視圖上下文的部分視圖。 –

+0

你試過我的代碼嗎?如果模型無效,它將返回到頁面。如果它有效,它設置tempdata變量。 – Sunny

+0

是的,我已經嘗試過,並與返回查看(contactData)它只返回部分視圖,失去父視圖。 –

相關問題