2014-01-31 3 views
0

Я хочу вернуть представление метода действия индекса в методе создания действия. Я пробовал писать return View("Index"); в методе действия индекса, но ничего не произошло. Оба мои методы действия находятся в одном контроллере. Как я могу это сделать?Как вернуть другой вид в методе действий?

Код:

public class GuestbookController : Controller 
{   
    // GET: /Guestbook/ 
    public ActionResult Index() 
    { 
     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["GuestbookContext"].ToString()); 
     string query = string.Format("Select * from Guestbook"); 
     SqlCommand cmd = new SqlCommand(query, conn); 
     conn.Open(); 
     SqlDataReader reader = cmd.ExecuteReader(); 
     List<GuestbookEntry> li = new List<GuestbookEntry>(); 
     while (reader.Read()) 
     { 
      GuestbookEntry GuestbookEntry = new GuestbookEntry(); 
      GuestbookEntry.Name = Convert.ToString(reader["Name"]); 
      GuestbookEntry.Message = Convert.ToString(reader["Message"]); 
      GuestbookEntry.Id = Convert.ToInt32(reader["Id"]); 
      GuestbookEntry.DateAdded = Convert.ToDateTime(reader["DateAdded"]); 
      li.Add(GuestbookEntry);  
     } 
     conn.Close(); 
     var mostRecentEntries =(from entry in li orderby entry.DateAdded descending select entry); 
     ViewBag.Entries = mostRecentEntries.ToList(); 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Create(GuestbookEntry entry) 
    { 
     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["GuestbookContext"].ToString()); 
     string query = string.Format("Insert into [Guestbook] values ('{0}','{1}','{2}')", entry.Name, entry.Message, DateTime.Now); 
     SqlCommand cmd = new SqlCommand(query, conn); 
     conn.Open(); 
     cmd.ExecuteNonQuery(); 
     conn.Close(); 

     return View("Index"); 
    } 
} 
+0

Что значит «ничего не случилось»? Я думаю, вам нужно «вернуть RedirectToAction (« Index »)' – Zabavsky

ответ

2

Вы только с помощью зрения, а не действие, поэтому ViewBag вы заполняете, привычка быть доступны.

Вы можете использовать RedirectToAction() для перенаправления текущего действия на другое действие.

[HttpPost] 
public ActionResult Create(GuestbookEntry entry) 
{ 
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["GuestbookContext"].ToString()); 
    string query = string.Format("Insert into [Guestbook] values ('{0}','{1}','{2}')", entry.Name, entry.Message, DateTime.Now); 
    SqlCommand cmd = new SqlCommand(query, conn); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 

    return RedirectToAction("Index"); 
} 
+1

спасибо человеку ... это было действительно полезно ....... – Ajay

1

Если вы пытаетесь вернуться на главную страницу, как если бы он был вызван из клиента, то вы должны использовать:

return Index(); //If you don't care about adjusting URL on client's machine 

Или

RedirectToAction("Index") //If you want to update client's URL 

Пожалуйста, обратите внимание, что второй опция влечет за собой полную обратную поездку к клиенту и обратно на сервер и не может быть легко использована в случае вызовов Ajax, тогда как первый вариант «остается на сервере» и может использоваться с Ajax.

Смежные вопросы