见下文:
Edit.aspx查看:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Test.Models.Friend>" %>
编辑
<h2>Edit</h2>
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.Id) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Id) %>
<%= Html.ValidationMessageFor(model => model.Id) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Name) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Name) %>
<%= Html.ValidationMessageFor(model => model.Name) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Link) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Link) %>
<%= Html.ValidationMessageFor(model => model.Link) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%= Html.ActionLink("Back to List", "Index") %>
</div>
编辑控制器:
[Authorize(Roles = "Administrator")]
public ActionResult Edit(int id)
{
var eddy = friendsDB.Friends.Single(a => a.Id == id);
return View(eddy);
}
[HttpPost]
public ActionResult Edit(int id, string confirmButton)
{
var eddx = friendsDB.Friends.Single(a => a.Id == id);
try
{
UpdateModel(eddx, "Friend");
friendsDB.SubmitChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
不要更新所以它不是一个令人耳目一新的观点。 它通过动作,并返回到应该发生的“索引”,但记录仍未编辑。使用linq to sql编辑的任何想法或替代方法?感谢。
答案 0 :(得分:0)
尝试更改
var eddx = friendsDB.Friends.Single(a => a.Id == id);
到
var eddx = friendsDB.Friends.GetById(id);
答案 1 :(得分:0)
或尝试更改
var eddx = friendsDB.Friends.Single(a => a.Id == id);
到
var eddx = (from q in friendsDB.Friends
where q.Id == id
select q).SingleOrDefault();
或(未经测试......)
var eddx = friendsDB.Friends.Where(a => a.Id == id).Single();
答案 2 :(得分:0)
我怀疑问题根本不是Linq to SQL,而是与您的View Model,FormCollection和/或UpdateModel调用有关。
请看一下这篇文章,例如:http://www.joe-stevens.com/2010/02/17/asp-net-mvc-using-controller-updatemodel-when-using-a-viewmodel/
通过UpdateModel单步执行任何更改?
答案 3 :(得分:0)
您需要告诉RedirectToAction("Index");
您要查看更新的记录。所以也许你正在寻找RedirectToAction("Index", new {id = eddx.Id});
。
答案 4 :(得分:0)
我认为问题在于您没有绑定新对象,因此UpdateModel不知道从哪里更新模型。
所以将方法签名更改为:
public ActionResult Edit(int id, FormCollection values, string confirmButton)
或
public ActionResult Edit(int id, Friend newfriend, string confirmButton)
在第二个问题中,如果朋友不是您的视图模型而只是模型的一部分,那么在朋友参数之前您可能需要[Bind(Prefix = "Friend")]
。