J'ai deux vues partielles "MyPopular" et "MyBlogs". Et il y a deux contrôleurs - "ArticleController.cs" et "ThePopularController.cs". Ces deux vues partielles contiennent des boutons.ASP.NET MVC3 RAZOR: Rediriger à partir de vues partielles
Initialement, il affiche les deux vues partielles dans la vue d'index.
Sur le gestionnaire d'action post pour le clic du blog, il est demandé de rediriger vers l'action "BlogHome" où il retournera une simple chaîne "Blog Home" (au lieu d'une vue). Sur le gestionnaire d'action de publication pour le clic populaire, il est demandé de rediriger vers l'action "PopularHome" où il retournera une chaîne simple "Accueil populaire". Mais actuellement, lorsque je clique sur l'un des boutons, il affiche localhost: 1988/Article index; sans contenu partiel.
Remarque: Le résultat est identique même lorsque j'ai utilisé ContentResult et ActionResult. Note: S'il vous plaît mettez en évidence si je vais dans le mauvais sens pour accomplir une tâche aussi simple.
Comment pouvons-nous le corriger pour effectuer la redirection appropriée?
// ArticleController
public class ArticleController : Controller
{
public ActionResult Index()
{
//Index returns no model
return View();
}
public string BlogHome()
{
return "Blog Home";
}
//ChildActionOnly attribute indicates that this action should not be callable directly via the URL.
[ChildActionOnly]
public ActionResult MyBlogs()
{
Thread.Sleep(500);
return PartialView(GetAllBlogEntries());
}
[ChildActionOnly]
[HttpPost]
public void MyBlogs(string blogclick)
{
RedirectToAction("BlogHome");
}
private IEnumerable<Blog> GetAllBlogEntries()
{
return new[]
{
new Blog { ID = 1, Head = "Introduction to MVC", PostBy = "Lijo", Content = "This is a ..." },
new Blog { ID = 2, Head = "jQuery Hidden Gems", PostBy = "Lijo", Content = "This is a ..." },
new Blog { ID = 3, Head = "Webforms Intenals", PostBy = "Lijo", Content = "This is a ..." }
};
}
}
// ThePopularController
public class ThePopularController : Controller
{
public string PoularHome()
{
return "Poular Home";
}
//ChildActionOnly attribute indicates that this action should not be callable directly via the URL.
[ChildActionOnly]
public ActionResult MyPopular()
{
Thread.Sleep(500);
return PartialView(GetPopularBlogs());
}
[ChildActionOnly]
[HttpPost]
public void MyPopular(string popularpress)
{
RedirectToAction("PoularHome");
}
private IEnumerable<PopularTutorial> GetPopularBlogs()
{
return new[]
{
new PopularTutorial { ID = 17, Title = "Test1", NumberOfReads = 1050 },
new PopularTutorial { ID = 18, Title = "Test2", NumberOfReads = 5550 },
new PopularTutorial { ID = 19, Title = "Test3", NumberOfReads = 3338 },
new PopularTutorial { ID = 20, Title = "Test4", NumberOfReads = 3338 },
new PopularTutorial { ID = 21, Title = "Test5", NumberOfReads = 3338 },
new PopularTutorial { ID = 22, Title = "Test6", NumberOfReads = 3338 },
new PopularTutorial { ID = 23, Title = "Test7", NumberOfReads = 3338 },
};
}
}
//Index.cshtml
All Blogs List
@Html.Action("myblogs")
<br />
<br />
Popular Tutorial
@Html.Action("mypopular","thepopular")
//MyPopular.cshtml
@model IEnumerable<MyArticleSummaryTEST.PopularTutorial>
@{
var grid = new WebGrid(Model, canPage: true, canSort: false, rowsPerPage: 3);
}
@grid.GetHtml(
columns: grid.Columns(grid.Column("", format: @<text>@item.Title</text>))
)
@using (Html.BeginForm())
{
<div>
<input type="submit" name ="popularpress" id="2"/>
</div>
}
//MyBlogs.cshtml
@model IEnumerable<MyArticleSummaryTEST.Blog>
<section>
<ul>
@Html.DisplayForModel()
</ul>
</section>
@using (Html.BeginForm())
{
<div>
<input type="submit" name ="blogclick" id="1"/>
</div>
}
// Blog Modèle Afficher
@model MyArticleSummaryTEST.Blog
<li>
<h3>@Html.DisplayFor(x => x.Head)</h3>
@Html.DisplayFor(x => x.Content)
</li>
LECTURE:
Redirect to Refer on Partial View Form Post using ASP.NET MVC
Why are Redirect Results not allowed in Child Actions in Asp.net MVC 2
d'une Réorienter Vue partielle du "droit" dans ASP.Net MVC 2 http://geekswithblogs.net/DougLampe/archive/2011/08/05/redirecting-from-a-partial-view-the-right-way-in-asp.net.aspx
Demandes partielles en ASP.NET MVC http://blog.stevensanderson.com/2008/10/14/partial-requests-in-aspnet-mvc/
tutoriel d'amélioration progressive avec asp.net mvc 3 et jquery http://www.matthidinger.com/archive/2011/02/22/Progressive-enhancement-tutorial-with-ASP-NET-MVC-3-and-jQuery.aspx
Vous avez des malentendus fondamentaux. Dans votre index.cshtml, vous voulez utiliser ActionLink, pas Action. Action tentera d'exécuter l'action, dans ce cas une redirection HTTP qui n'est pas appropriée, plutôt que de fournir un lien sur lequel vous pouvez cliquer. Je suis sûr que c'est un lien que vous voulez. Étant donné qu'il n'y a pas besoin de ChildActionOnly - cela empêchera ce que vous voulez - ou les actions POST, puisqu'il s'agira d'une requête GET. Je peux me tromper sur ce que vous essayez de réaliser, mais je pense que vous l'avez rendu plus compliqué qu'il ne devrait l'être. – tvanfosson