ASP.NET MVC:如何在索引视图中创建一个部分视图?
问题描述:
我有一个索引视图网格,我想在底部创建一个局部视图 - 这样用户可以在同一页面上创建一个新项目来查看所有项目。但是,在提交部分创建视图时,主索引页面没有任何反应;它不会更新新项目(尽管它在刷新后会在那里更新)。ASP.NET MVC:如何在索引视图中创建一个部分视图?
索引页:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Paris.Domain.Models.PhoneNumberType>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<table>
<tr>
<th></th>
<th>
PhoneNumberTypeID
</th>
<th>
Name
</th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink("Edit", "Edit", new { id=item.PhoneNumberTypeID}) %> |
<%: Html.ActionLink("Delete", "Delete", new { id=item.PhoneNumberTypeID })%>
</td>
<td>
<%: item.PhoneNumberTypeID %>
</td>
<td>
<%: item.Name %>
</td>
</tr>
<% } %>
</table>
<p>
Create New
</p>
<% Html.RenderAction("Create"); %>
</asp:Content>
这里是控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Paris.Domain.Access;
namespace Paris.Web.Areas.Domain.Controllers
{
public class PhoneNumberTypesController : Controller
{
//
// GET: /Domain/PhoneNumberTypes/
private IRepository<Paris.Domain.Models.PhoneNumberType> db;
public PhoneNumberTypesController(IRepository<Paris.Domain.Models.PhoneNumberType> context)
{
db=context;
}
public ViewResult Index()
{
return View(db.Get().Select(i=>i));
}
public ViewResult IndexCreate(Paris.Domain.Models.PhoneNumberType num)
{
Create(num);
return View();
}
public ViewResult Edit()
{
return View();
}
[HttpPost]
public ViewResult Edit(Paris.Domain.Models.PhoneNumberType num)
{
try
{
if (ModelState.IsValid)
{
db.Update(num);
return Index();
}
else
return View();
}
catch
{
return View();
}
}
[HttpPost]
public ViewResult Delete(int PhoneNumberTypeID)
{
db.Delete(db.Get().First(i => i.PhoneNumberTypeID == PhoneNumberTypeID));
return Index();
}
[HttpPost]
public ViewResult Create(Paris.Domain.Models.PhoneNumberType num)
{
try
{
if (ModelState.IsValid)
{
db.Create(num);
return View();
}
else
return View();
}
catch
{
return View();
}
}
[HttpGet]
public ViewResult Create()
{
return View();
}
}
}
如果我这样做完全错误的,随意点出我的想法是怎样的缺陷。
感谢
答
你在做什么逻辑上是正确的。但是,在部分创建的提交按钮上,您的整个页面应该刷新。为什么没有发生?你使用Ajax创建新记录吗?
我想这是你在做什么:
- 发帖创建行动。
- 记录已创建,然后从数据源中提取新记录集。
- 您将其传回您的视图(
return View("Index", recordset)
)。 - 索引视图刷新了新的记录集。
如果你正在做这些步骤,那么它应该工作。
答
在您的Create
操作方法中,您只返回创建视图,而不是整个页面。这是因为View()
的默认行为是返回与操作方法同名的视图。因此,如果您希望帖子返回整个页面,则需要指定正确的视图名称,或者更好地将重定向返回到Index操作。例如:return RedirectToAction("Index");
我刚刚发布了它的代码它有帮助 – Micah 2011-01-08 15:39:01