有人可以解释这个Linq-To-Sql代码有什么问题吗?

时间:2010-07-30 04:11:29

标签: asp.net-mvc linq-to-sql model-view-controller

见下文:

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编辑的任何想法或替代方法?感谢。

5 个答案:

答案 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")]