Mvc View渲染

时间:2015-12-22 23:00:00

标签: c# asp.net asp.net-mvc razor

我正在尝试创建联系我们页面,其中用户填写详细信息并提交,并在底部显示来自服务器的消息。

我实施的方式是这样的。

[HttpGet]
public ActionResult ContactUs()
{
    //Process the stuff
    return View("~Views/Contact/Contact.cshtml", model)
}

现在当页面加载时它会触及上面的方法并显示包含页眉和页脚的布局。

用户提交表单后,会点击方法

[HttpPost]
public ActionResult ContactUs(ContactUs form)
{
    //Process the stuff

    View.Message="Thank you for your enquiry."

    return View("~Views/Contact/Contact.cshtml", model)
}

它返回到同一页面,但它不会渲染主体布局,甚至页眉或页脚只显示输出形式。

不确定我在那里做错了什么,有没有更好的方法?

谢谢

3 个答案:

答案 0 :(得分:0)

根据上面的代码,我相信你正在尝试类似的事情:

public class UxController : Controller
{
     public ActionResult WithResponse(ActionResult result, string message)
     {
          PageResponse(message);
          return result;
     }

     protected void PageResponse(string message)
     {
          TempData["Ux_Response"] = message;
     }
}

这将是您的Controller,然后是该特定页面的Controller,它看起来像:

public class HomeController : UxController
{
     public ActionResult Index()
     {
           return View();
     }

     public ActionResult SubmitForm(string message)
     {
          return WithResponse(RedirectToAction("Index"), "Thank you for feedback.");
     }
}

然后在您的前端代码中,您将执行以下操作:

@if(TempData["Ux_Response"] != null)
{
     <div>@TempData["Ux_Response"]</div>
}

<form action="/Home/SubmitForm" method="post">
     <input type="text" name="message" />
     <input type="submit" value="Submit" />
</form>

显然你可以通过更多功能增强它。但是,您依赖Post,这会导致屏幕闪烁。所以更好的路线可能是做Ajax,然后返回JsonResult。希望这可以帮助你。

答案 1 :(得分:0)

如果你改变你的控制器/视图,它应该可以工作。

控制器;

    public ActionResult Contact(ContactModel model)
    {
        ViewBag.Message = "Your contact page.";

        return View(model);
    }


    public ActionResult SaveContact(ContactModel model)
    {
        //process values in your model and then rest model
        ContactModel.Message = "Thank you for contacting us"; //show thank you message

        return RedirectToAction("Contact",model);
    }

查看;

@model MvcApplication1.Models.ContactModel 
@{
    ViewBag.Title = "Contact";
}

@using (Html.BeginForm("SaveContact", "Home", Model, FormMethod.Post))
{
    @Html.DisplayFor(m => m.Message);

    <button type="submit">Submit</button>
}

答案 2 :(得分:0)

我要解决这个问题。问题是因为我使用的是sitecore cms表单操作没有处理它的完整工作流程,在我删除了操作后,它默认为在cms中定义的操作方法并触发cms工作流程。