2014-11-04 110 views
2

我正在嘗試渲染包含簡單html表單的局部視圖。我想從控制器呈現表單,因爲我從重載的控制器方法處理回發。我曾嘗試@ Html.Action(「ContactForm」),但我得到一個異常,因爲子操作不能重定向。部分視圖和html格式Asp Mvc

我的控制器:

public ActionResult Index() 
{ 
    return View(); 
} 

[HttpGet] 
public ActionResult ContactForm() 
{ 
    return PartialView(new ContactForm()); 
} 

[HttpPost] 
public ActionResult ContactForm(ContactForm Contact) 
{ 
    return RedirectToAction("FormResults", new { ContactForm = Contact }); 
} 

public ActionResult FormResults(ContactForm Contact) 
{ 
    return PartialView(Contact); 
} 

我的表格:

@using(Html.BeginForm()) 
{ 
    <h2>Contact Form</h2> 
    <div class="input-group"> 
     <h4>@Html.LabelFor(m => m.FirstName, "First Name")</h4> 
     @Html.TextBoxFor(m => m.FirstName, new { @class = "form-control", @placeholder = "First Name" }) 
    </div> 
    <div class="input-group"> 
     <h4>@Html.LabelFor(m => m.LastName, "Last Name")</h4> 
     @Html.TextBoxFor(m => m.LastName, new { @class = "form-control", @placeholder = "Last Name" }) 
    </div> 
    <div class="input-group"> 
     <h4>@Html.LabelFor(m => m.Email, "Email")</h4> 
     @Html.TextBoxFor(m => m.Email, new { @class = "form-control", @placeholder = "Email", @type = "text" }) 
    </div> 

    <input type="submit" class="btn btn-info" value="Submit" /> 
} 

上我將如何做到這一點任何幫助,將不勝感激。

回答

1

嘗試,圍繞着一個div並有一定的ID和使用形式:

@using(Ajax.BeginForm("ContactForm","YourController",new AjaxOptions() 
{ 
    InsertionMode = InsertionMode.Replace, 
    UpdateTargetId = "yourCertainId", 
    HTTPMethod = "POST" 
}) 

和你ActionMethod:

[HttpPost] 
public ActionResult ContactForm(ContactForm Contact) 
{ 
    return Partial("YourPartialName", Contact }); 
} 

確保您包括您的視圖底部的束jqueryval 。

您不需要第二個控制器方法「FormResults」

0

有沒有像這樣的東西不適合你?

我不認爲你需要重定向。

[HttpPost] 
public ActionResult ContactForm(ContactForm Contact) 
{ 
    return PartialView("FormResults", Contact); 
} 

這使用在控制器類中的PartialView方法的

PartialView(string viewName, object model) 

過載。

這允許您使用與ActionResult的方法名稱不匹配的視圖。

同樣的事情也適用於普通的「視圖」方法。