Привет.
В попытке обернуть голову вокруг MVC, я только что реализовал простую страницу добавления / удаления, которая также просматривает записи. Это облегчает пользователям выполнение большинства задач с одной страницы, вместо того чтобы выполнять простые задачи. На странице можно добавить запись (бизнес, который имеет идентификатор и имя), который работает нормально. Однако, когда я удаляю запись, я сделал следующее, чтобы разрешить удаление:
<%= 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 неверный. Что я тут не так делаю?
FIXED
public RedirectToRouteResult DeleteBusiness(string businessToDelete)
{
try
{
if (!ModelState.IsValid)
return RedirectToAction("Businesses");
_contractsControlRepository.DeleteBusiness(businessToDelete);
return RedirectToAction("Businesses");
}
catch
{
return RedirectToAction("Businesses");
}
}