重定向错误asp.net

时间:2012-09-20 12:32:01

标签: c# asp.net razor

我的代码有问题:

  • 我想重定向到带有cshtml文件
  • 参数的动作
  • 但找不到网址 文件Admin cshtml:

    @{ Layout = "~/Views/Shared/_General.cshtml";
    }
    <table>
        <tr>
            <td><label  title= "Name " runat="server">Name</label></td>
            <td><label  title= "Email " runat="server">Email</label></td>
            <td><label  title= "Password" runat="server">Password</label></td>
            <td><label  title= "Phone" runat="server">Phone</label></td>
        </tr>
    
        @foreach (var marker in @Model)
        {
            <tr>
                 <td><label  title= "Nom " runat="server" >@marker.ContactName</label>/td>
                 <td><label  title= "mail " runat="server">@marker.ContactEmail</label>/td>
                 <td><label  title= "mot " runat="server" >@marker.Password</label>/td>
                 <td><label  title= "phone " runat="server" >@marker.ContactPhone</label></td>
                 <td><label  id="id" style="visibility:hidden">@marker.Identification</label></td>
                 <td>@Html.ActionLink("Edit", "Edit", new { Identification = @marker.Identification }) | @Html.ActionLink("Delete", "Delete", "Administration")</td>  
            </tr>
        }
    </table>
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    

我的行动是:

[HttpPost]
public ActionResult Edit(string Identification)
{
    DATA2.User u = c.GetUserById(Identification);
    return View(u);
}

如何更正此代码?

1 个答案:

答案 0 :(得分:0)

查看代码时,第一件事让我感到震惊的是runat="server"。 ASP.NET MVC中没有这样的东西。请从您使用它的每个地方删除它。

我可以在代码中看到的一个问题是,您使用[HttpPost]属性修饰了控制器操作。不要忘记,当您定义ActionLink时,会生成一个锚标记(<a>),后者又会向服务器发送GET请求。如果使用[HttpPost]属性修饰控制器操作,则基本上只能使用POST HTTP谓词调用此操作。如果您希望从ActionLink访问该操作,则必须删除此属性:

public ActionResult Edit(string Identification)
{
    DATA2.User u = c.GetUserById(Identification);
    return View(u);
}

接下来我想我们必须关注编辑链接:

@Html.ActionLink("Edit", "Edit", new { Identification = marker.Identification })

你说它无法找到编辑动作,对吗?如果是这种情况,那么您还可以指定控制器操作以及区域(如果此控制器位于区域内):

@Html.ActionLink(
    "Edit", 
    "Edit", 
    "SomeContorller", 
    new { Identification = "marker.Identification" }, 
    null
)

如果您尝试访问的控制器操作未在用于呈现视图的同一控制器内定义,则必须执行此操作。