Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ASP.NET MVC 4 AJAX.BeginForm和PartialView_Javascript_Asp.net_Ajax_Asp.net Mvc 4_Partial Views - Fatal编程技术网

Javascript ASP.NET MVC 4 AJAX.BeginForm和PartialView

Javascript ASP.NET MVC 4 AJAX.BeginForm和PartialView,javascript,asp.net,ajax,asp.net-mvc-4,partial-views,Javascript,Asp.net,Ajax,Asp.net Mvc 4,Partial Views,我正在考虑使用AJAX.BeginForm构建SPA,但是当用户禁用JavaScript时,我会遇到一个问题,它不会将用户重定向到_Layout.cshtml+PartialView.cshtml,而是将用户重定向到PartialView.cshtml 是否有一种方法可以将布局和PartialView包含在其中(如果启用了JavaScript,则会出现这种情况) 谢谢 编辑: 太棒了。。谢谢我设法让它工作,但我不确定这是最好的实现 [HttpPost] public Action

我正在考虑使用AJAX.BeginForm构建SPA,但是当用户禁用JavaScript时,我会遇到一个问题,它不会将用户重定向到_Layout.cshtml+PartialView.cshtml,而是将用户重定向到PartialView.cshtml

是否有一种方法可以将布局和PartialView包含在其中(如果启用了JavaScript,则会出现这种情况)

谢谢

编辑:

太棒了。。谢谢我设法让它工作,但我不确定这是最好的实现

    [HttpPost]
    public ActionResult Index(Newsletter newsletter)
    {
        if (ModelState.IsValid)
        {
            db.Newsletters.Add(newsletter);
            db.SaveChanges();
            ViewData["message"] = "thanks for signing up to our newsletter!";
            if (Request.IsAjaxRequest())
            {
                return PartialView( "SimpleMessage" );
            }
        }
        return View();
    }
而SimpleMessage.phtml只是@ViewData[“message”]


鉴于my View.phtml,我有一个条件并检查是否设置了ViewBag[“message”]。如果设置了,则表示它是回发,不显示表单,而是显示消息,或者显示表单:

您可以检查是否通过Ajax调用了操作,并返回不同类型的结果

public ActionResult MyAction()
{
    if(Request.IsAjaxRequest()) {
        // Html fragment
        return PartialView();
    }
    else {
        // Complete HTML page
        return View();
    }
}
如果是回发,则可以传递模型或简单类型(int、string):

[HttpPost]
public ActionResult MyAction(Model model)
{
    if(Request.IsAjaxRequest()) {
        // Html fragment
        return PartialView(model);
    }
    else {
        // Complete HTML page
        return View(model);
    }
}
编辑:在您的特定情况下,我会这样做,但这只是我的偏好

[HttpPost]
public ActionResult Index(Newsletter newsletter)
{
    if (ModelState.IsValid)
    {
        db.Newsletters.Add(newsletter);
        db.SaveChanges();
        if (Request.IsAjaxRequest())
            return PartialView("SimpleMessage");
        else
            return View("SimpleMessage")
    }
    if (Request.IsAjaxRequest())
        return PartialView(newsletter);
    else
        return View(newsletter);
}

如果没有javascript,该函数将如何调用?Ajax.BeginForm helper会自动处理这个问题。如果禁用javascript,它将返回正常的回发。类似的情况也发生在Ajax.ActionLink helper上,它会返回到正常的链接行为。在表单提交中,如果您返回一个PartialView并返回成功结果,这将如何工作?如果禁用JS,我是否必须为该表单的成功结果创建一个全新的视图,并在成功时返回该视图?这取决于您的用例。如果您的完整视图=(部分+布局)如您所述,那么您可以在两种情况下返回相同的(“MyAction.cshtml”)视图。我已经编辑了上面的文章,包括我的解决方案,但不太确定这是否是最好的方法。