【发布时间】:2009-07-30 19:27:43
【问题描述】:
您好。
为了尝试了解 MVC,我刚刚实现了一个简单的添加/删除页面,该页面也可以查看记录。这使用户可以更轻松地从一个页面完成大多数事情,而不必离开去完成简单的任务。该页面允许您添加一条运行良好的记录(具有 ID 和名称的企业)。但是,当我删除一条记录时,我已执行以下操作以允许删除:
<%= Html.ActionLink("delete", "DeleteBusiness", new { businessToDelete = B.BusinessID }) %>
这可以很好地删除记录。这是我的控制器操作的样子:
public ActionResult DeleteBusiness(string businessToDelete)
{
try
{
if (!ModelState.IsValid)
return View("Businesses", _contractsControlRepository.ListBusinesses());
_contractsControlRepository.DeleteBusiness(businessToDelete);
return View("Businesses", _contractsControlRepository.ListBusinesses());
}
catch
{
return View("Businesses", _contractsControlRepository.ListBusinesses());
}
}
因此,在“业务”页面中,我有一个 ActionLink,它只是将我引导至控制器中的此操作,该操作完成工作,然后返回我之前所在的视图。那么问题是 一旦我删除了记录,我的实际 URL 最终会像这样:
http://localhost:3340/Accounts/ContractsControl/DeleteBusiness?businessToDelete=TEST
这不好,因为当我再去添加新记录时,它不会让我。让我添加记录的控制器操作如下所示:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Businesses(Business business)
{
try
{
if (!ModelState.IsValid)
return View(_contractsControlRepository.ListBusinesses());
_contractsControlRepository.CreateBusiness(business);
return View(_contractsControlRepository.ListBusinesses());
}
catch
{
return View(_contractsControlRepository.ListBusinesses());
}
}
任何post 请求都被视为创建新记录。这个对吗?这是我的观点,最重要的是:
<% using (Html.BeginForm())
{ %>
<fieldset class="inline-fieldset">
<legend>Add Business</legend>
<p>
<label for="ID">ID</label>
<%= Html.TextBox("BusinessID", null, new { style = "width:50px;", @class = "uppercase", maxlength = "4" })%>
<%= Html.ValidationMessage("BusinessID", "*")%>
<label for="Business">Business</label>
<%= Html.TextBox("BusinessCol")%>
<%= Html.ValidationMessage("BusinessCol", "*")%>
<input type="submit" value="Add" />
</p>
<%= Html.ValidationSummary("Uh-oh!") %>
</fieldset>
<% } %>
<table>
<tr>
<th>ID</th>
<th>Business</th>
<th></th>
<th></th>
</tr>
<% foreach (Business B in ViewData.Model)
{ %>
<tr>
<td><%= B.BusinessID %></td>
<td><%= B.BusinessCol %></td>
<td class="edit"><%= Html.ActionLink("edit", "EditBusiness", new { id = B.BusinessID }) %></td>
<td class="delete"><%= Html.ActionLink("delete", "DeleteBusiness", new { businessToDelete = B.BusinessID }) %></td>
</tr>
<% } %>
</table>
正如您在最底部看到的那样,我有操作链接(忽略编辑链接)。因此,如果我删除一条记录,然后立即尝试添加一条记录,它将无法正常工作,因为(我假设)URL 错误。我在这里做错了什么?
已修复
public RedirectToRouteResult DeleteBusiness(string businessToDelete)
{
try
{
if (!ModelState.IsValid)
return RedirectToAction("Businesses");
_contractsControlRepository.DeleteBusiness(businessToDelete);
return RedirectToAction("Businesses");
}
catch
{
return RedirectToAction("Businesses");
}
}
【问题讨论】:
标签: asp.net-mvc