C# ASP.net MVC 3编辑/删除问题
所以我刚刚在完成了这个项目。我正在尝试创建一个CRUD,以便与已经存在的外部数据库一起使用,我只是将该项目用作我自己工作的指南。我已经能够更改某些变量名和连接,以连接到我尝试使用的数据库,甚至使用index方法显示了我想要的数据。我还能够让create方法工作,并且能够在正在使用的数据库中创建新数据。不幸的是,在我进行了所需的更改后,在使用Edit或Delete方法或save/Delete方法时,我无法将数据拉入 例如,当我按下编辑按钮时,它应该拉取我单击的记录,以便我可以编辑特定的记录信息,但它抛出了一个错误,表示此变量不能接受空值,这就是为什么我在编辑删除方法中将int更改为字符串。这一部分已经解决 我认为这个问题与编辑和删除方法有关,当我告诉记录集时,它们没有拉取记录集。有人知道为什么在我告诉它保存更改后,它在编辑/删除或保存更改时不拉取记录集吗 我已经发布了我的paccontroller类,其中包含用于诊断的CRUD方法,以及我的iamp_映射类文件,其中包含我需要处理的3个字段。我90%确定我的控制器有问题,但是如果你需要更多关于这个问题的代码/信息,请给我留个便条,我会经常检查,因为我太困了!非常感谢你的帮助 遥控器 iamp_映射 编辑视图代码 } Delete.cshtmlC# ASP.net MVC 3编辑/删除问题,c#,asp.net,database,asp.net-mvc-3,razor,C#,Asp.net,Database,Asp.net Mvc 3,Razor,所以我刚刚在完成了这个项目。我正在尝试创建一个CRUD,以便与已经存在的外部数据库一起使用,我只是将该项目用作我自己工作的指南。我已经能够更改某些变量名和连接,以连接到我尝试使用的数据库,甚至使用index方法显示了我想要的数据。我还能够让create方法工作,并且能够在正在使用的数据库中创建新数据。不幸的是,在我进行了所需的更改后,在使用Edit或Delete方法或save/Delete方法时,我无法将数据拉入 例如,当我按下编辑按钮时,它应该拉取我单击的记录,以便我可以编辑特定的记录信息,但
这里的问题是,当您单击编辑按钮/链接时,编辑操作将需要int类型的id(如果您使用int),但是如果您使用int?…这就是MVC的行为方式…您最好尝试使用url,例如http://urwebsite.com/Pa/Edit?id=[使用有效的id]…通过此操作,您将在编辑操作中拥有一个id 更新 我认为您在这里遇到的问题是编辑操作方法中的Id值为null…MVC引擎无法从Url模式中识别Id值 因此,在有编辑链接/按钮的页面上,您可以使用
<a href="/Pa/Edit/@model.id">Edit</a>
{
还要确保为url模式/Pa/Edit/{id}配置了路由
如果您想了解更多有关mvc中路由的信息,您可能需要阅读此文章
这将确保当对编辑操作方法发出Get请求时,可以识别id值
希望这有帮助…我的链接由于某种原因无法获取id,因此我从一门课程中找到了解决方案。 他在函数中添加了第五个参数“null”,如下所示
@Html.ActionLink(“编辑”、“编辑”、“帐户”,新的{id=Account.id},null)
(文本、操作、控制器、路由值、null或HTML属性)
这为我解决了这个问题。如何
db.iamp\u mapping.Find(id)呢
当iamp\u映射没有int-Id属性时工作?这是一个很好的问题,Henk,我也在想,当我试图修复错误时,我实际上将Id更改为iamp,我是否应该将其更改为PA或Major\u Program或Investment\u Area会像那样工作?我认为Id是一种迭代器,但我完全可以错!我想我知道了id来自何处,上面我添加了索引类中的代码,并解释了我所做的更改及其原因。我发布了视图代码,但我不明白如何在编辑控制器中使用url感谢您的帮助!感谢您的快速回复Nik我在阅读后解决了部分问题正在删除您的响应。这不完全是路由,但它确实涉及到用主键实例化id的索引。我所要做的就是在编辑操作链接后添加。然后我的数据按预期的方式填充。我已在上面发布了我的index.cshtml,以便下一个遇到此问题的人可以看到如何修复。我还有一个问题n如果你有时间的话。编辑方法现在工作得很好,但删除方法仍然很古怪。在我按下delete键后,它会删除删除屏幕上的数据,但不会在DB或索引屏幕上,它不会像应该的那样将我发送回索引屏幕。因此实际上它不会删除!啊…我太接近了。我已经发布了我的删除以上e视图供检查。非常感谢您继续帮助您摇滚!!
using System;
using System.Collections.Generic;
namespace DBFirstMVC.Models
{
public partial class iamp_mapping
{
public string PA { get; set; }
public string MAJOR_PROGRAM { get; set; }
public string INVESTMENT_AREA { get; set; }
}
}
@model DBFirstMVC.Models.iamp_mapping
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>iamp_mapping</legend>
<div class="editor-label">
@Html.LabelFor(model => model.PA)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PA)
@Html.ValidationMessageFor(model => model.PA)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.MAJOR_PROGRAM)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MAJOR_PROGRAM)
@Html.ValidationMessageFor(model => model.MAJOR_PROGRAM)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.INVESTMENT_AREA)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.INVESTMENT_AREA)
@Html.ValidationMessageFor(model => model.INVESTMENT_AREA)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@model IEnumerable<DBFirstMVC.Models.iamp_mapping>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
PA
</th>
<th>
MAJOR PROGRAM
</th>
<th>
INVESTMENT AREA
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.PA)
</td>
<td>
@Html.DisplayFor(modelItem => item.MAJOR_PROGRAM)
</td>
<td>
@Html.DisplayFor(modelItem => item.INVESTMENT_AREA)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.PA }) |
@Html.ActionLink("Details", "Details", new { id=item.PA }) |
@Html.ActionLink("Delete", "Delete", new { id=item.PA })
</td>
</tr>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.PA }) |
@Html.ActionLink("Details", "Details", new { id=item.PA }) |
@Html.ActionLink("Delete", "Delete", new { id=item.PA })
</td>
</tr>
@model DBFirstMVC.Models.iamp_mapping
@{
ViewBag.Title = "Delete";
}
<h2>Delete</h2>
<h3>Are you sure you want to delete this?</h3>
<fieldset>
<legend>iamp_mapping</legend>
<div class="display-label">PA</div>
<div class="display-field">
@Html.DisplayFor(model => model.PA)
</div>
<div class="display-label">MAJOR_PROGRAM</div>
<div class="display-field">
@Html.DisplayFor(model => model.MAJOR_PROGRAM)
</div>
<div class="display-label">INVESTMENT_AREA</div>
<div class="display-field">
@Html.DisplayFor(model => model.INVESTMENT_AREA)
</div>
</fieldset>
@using (Html.BeginForm()) {
<p>
<input type="submit" value="Delete" /> |
@Html.ActionLink("Back to List", "Index")
</p>
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace DBFirstMVC
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Pa", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
}
<a href="/Pa/Edit/@model.id">Edit</a>
@foreach(var item in Model)
}