在mvc 4.0中发布表单后呈现数据的最佳实践

时间:2013-12-15 17:27:09

标签: asp.net-mvc asp.net-mvc-4 razor

实施例: 我有一个“联系我们”视图和控制器。

我的观点呈现联系我们表格以及包含邮政,电话和电子邮件信息的页面其余部分。

提交表单时,我想呈现相同的数据,只需减去联系我们表单,然后显示“发送的消息”。

我在控制器上有一个“发送”方法,可以使用联系我们视图中的所有数据创建一个“发送”视图,减去联系我们表单和“发送消息”字符串。但显然现在在两个地方复制代码远非理想。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我建议您使用Ajax.BeginForm而不是使用BeginForm。原因是您不需要创建另一个动作,Ajax.BeginForm将为您更新显示局部视图。

以下是一个例子:

<强>动作

[HttpGet]
public ActionResult Contact()
{
    return View(new Contact());
}

[HttpPost]
public ActionResult Contact(Contact contact)
{
    if (ModelState.IsValid)
    {
        //
    }
    return PartialView("_messagePartialView", contact);
}

查看

  @model  Demo.Models.Contact

    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>

    <div id="result">        
        @using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
        {
            @Html.EditorFor(x => x.Email)

            <input type="submit" value="OK" />
        }    
    </div>

部分视图:_messagePartialView

  @model  Demo.Models.Contact

    <h1>
        @Model.Email
    </h1>

答案 1 :(得分:0)

我假设您有一个用于从用户那里获取数据的联系人模型。

我假设你有如下发送方法:

[HttpPost]
public ActionResult Send(Contact contact){
  // process your model. ie : send email etc.

  TempData["contactData"] = contact;

  return RedirectToAction("Sent");
}

public Actionresult Sent(){

  return View();
}

在发送的视图中,您可以使用TempData并访问Contact模型属性。