Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ActionLink未调用控制器_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# ActionLink未调用控制器

C# ActionLink未调用控制器,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我在视图中定义了一个动作链接 @Html.ActionLink("Mark as Completed", "MarkComplete", new { id = item.ID }) 但是,这不会调用控制器中的方法,而是调用它生成以下链接的链接 我有什么遗漏吗 全视图代码 @model IEnumerable<Base.Models.Task> @{ ViewBag.Title = "UserTasks"; } <h2>User</h2> @u

我在视图中定义了一个动作链接

@Html.ActionLink("Mark as Completed", "MarkComplete", new { id = item.ID })
但是,这不会调用控制器中的方法,而是调用它生成以下链接的链接

我有什么遗漏吗

全视图代码

@model IEnumerable<Base.Models.Task> @{
    ViewBag.Title = "UserTasks"; }

<h2>User</h2>


@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()

        <h4>Task for User</h4>
        <table class="table">
            <tr>  
                <th>
                    Name
                </th>
                <th>
                    Details
                </th>
                <th>
                    Start Date
                </th>
                <th>
                    Due Date
                </th>
             </tr>
                    @foreach (var item in Model) {
                <tr>
                    <td>@item.Name </td>
                    <td>@item.Details</td>
                    <td>@item.StartDate.ToShortDateString()</td>
                    <td>@item.EndDate.ToShortDateString()</td>
                    <td>
                        @Html.ActionLink("Mark as Completed", "MarkComplete", new { id = item.ID })
                    </td>
                </tr>
                        }
                </table>
    }
            <div>
                @Html.ActionLink("Back to List", "Index")
            </div>

            @section Scripts {
                @Scripts.Render("~/bundles/jqueryval")
            }
@model IEnumerable@{
ViewBag.Title=“UserTasks”;}
使用者
@使用(Html.BeginForm()){
@Html.AntiForgeryToken()
用户任务
名称
细节
开始日期
到期日
@foreach(模型中的var项目){
@项目名称
@项目.详情
@item.StartDate.ToShortDateString()文件
@item.EndDate.ToShortDateString()的
@ActionLink(“标记为已完成”,“标记完成”,新的{id=item.id})
}
}
@ActionLink(“返回列表”、“索引”)
@节脚本{
@Scripts.Render(“~/bundles/jqueryval”)
}

您的操作被标记为
HttpPost
属性,而
ActionLink
生成
GET
请求。更准确地说,
ActionLink
呈现一个锚定标记,单击该锚定标记会向服务器发送一个
GET
请求

操作标记为
HttpPost
属性有什么特殊原因吗?您可能希望删除该属性或用
HttpGet
属性替换它

如果出于某些原因,要求操作仅侦听
POST
请求,那么您可以使用带有单个按钮样式的表单,而不是使用
ActionLink

@using(Html.BeginForm("MarkComplete", "Users")) {
    <input type="hidden" name="id" value="@item.ID">
    <input type="submit" value="Mark as Completed" />
}
@使用(Html.BeginForm(“MarkComplete”、“Users”)){
}
但是,您已经将整个表包装在一个表单中,是的,表单不能嵌套,因此您需要更显著地更改视图

因此,整个视图可能如下所示:

@model IEnumerable<Base.Models.Task>
@{ ViewBag.Title = "UserTasks"; }

<h2>User</h2>

<h4>Task for User</h4>
<table class="table">
    <tr>  
        <th>
            Name
        </th>
        <th>
             Details
        </th>
        <th>
            Start Date
        </th>
        <th>
            Due Date
        </th>
    </tr>
    @foreach (var item in Model) {
        <tr>
            <td>@item.Name </td>
            <td>@item.Details</td>
            <td>@item.StartDate.ToShortDateString()</td>
            <td>@item.EndDate.ToShortDateString()</td>
            <td>
                @using(Html.BeginForm("MarkComplete", "Users")) {
                    @Html.AntiForgeryToken()
                    <input type="hidden" name="id" value="@item.ID">
                    <input type="submit" value="Mark as Completed" />
                }
            </td>
        </tr>
    }
</table>

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
@model IEnumerable
@{ViewBag.Title=“UserTasks”;}
使用者
用户任务
名称
细节
开始日期
到期日
@foreach(模型中的var项目){
@项目名称
@项目.详情
@item.StartDate.ToShortDateString()文件
@item.EndDate.ToShortDateString()的
@使用(Html.BeginForm(“MarkComplete”、“Users”)){
@Html.AntiForgeryToken()
}
}
@ActionLink(“返回列表”、“索引”)
@节脚本{
@Scripts.Render(“~/bundles/jqueryval”)
}

您的操作被标记为
HttpPost
属性,而
ActionLink
生成
GET
请求。更准确地说,
ActionLink
呈现一个锚定标记,单击该锚定标记会向服务器发送一个
GET
请求

操作标记为
HttpPost
属性有什么特殊原因吗?您可能希望删除该属性或用
HttpGet
属性替换它

如果出于某些原因,要求操作仅侦听
POST
请求,那么您可以使用带有单个按钮样式的表单,而不是使用
ActionLink

@using(Html.BeginForm("MarkComplete", "Users")) {
    <input type="hidden" name="id" value="@item.ID">
    <input type="submit" value="Mark as Completed" />
}
@使用(Html.BeginForm(“MarkComplete”、“Users”)){
}
但是,您已经将整个表包装在一个表单中,是的,表单不能嵌套,因此您需要更显著地更改视图

因此,整个视图可能如下所示:

@model IEnumerable<Base.Models.Task>
@{ ViewBag.Title = "UserTasks"; }

<h2>User</h2>

<h4>Task for User</h4>
<table class="table">
    <tr>  
        <th>
            Name
        </th>
        <th>
             Details
        </th>
        <th>
            Start Date
        </th>
        <th>
            Due Date
        </th>
    </tr>
    @foreach (var item in Model) {
        <tr>
            <td>@item.Name </td>
            <td>@item.Details</td>
            <td>@item.StartDate.ToShortDateString()</td>
            <td>@item.EndDate.ToShortDateString()</td>
            <td>
                @using(Html.BeginForm("MarkComplete", "Users")) {
                    @Html.AntiForgeryToken()
                    <input type="hidden" name="id" value="@item.ID">
                    <input type="submit" value="Mark as Completed" />
                }
            </td>
        </tr>
    }
</table>

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
@model IEnumerable
@{ViewBag.Title=“UserTasks”;}
使用者
用户任务
名称
细节
开始日期
到期日
@foreach(模型中的var项目){
@项目名称
@项目.详情
@item.StartDate.ToShortDateString()文件
@item.EndDate.ToShortDateString()的
@使用(Html.BeginForm(“MarkComplete”、“Users”)){
@Html.AntiForgeryToken()
}
}
@ActionLink(“返回列表”、“索引”)
@节脚本{
@Scripts.Render(“~/bundles/jqueryval”)
}

将ActionLink替换为

<input type="submit" value="Mark as Completed"> 

所以它有一个帖子

将表单的操作设置为ActionLink指向的位置


将ActionLink替换为

<input type="submit" value="Mark as Completed"> 

所以它有一个帖子

将表单的操作设置为ActionLink指向的位置


删除
[HttpPost]
属性(链接生成GET,而不是POST)。Vut因为您的方法正在更改数据-它应该是一篇文章,并且在视图中使用表单。如果(ModelState.IsValid){-您没有绑定到模型,因此它总是
true
删除现有表单,并且对于每个项目,使用
@using(Html.BeginForm(“MarkComplete”,“yourController”,new{id=item.id})){@Html.AntiForgeryToken()删除
[HttpPost]
属性(链接生成GET,而不是POST)。Vut因为您的方法正在更改数据-它应该是POST,并且在视图中使用表单。如果(ModelState.IsValid){
,您也可以删除
-您没有绑定到模型,因此它总是
true
删除现有表单,并且对于每个项目,使用
@using(Html.BeginForm(“MarkComplete”),“yourController”,新的{id=item.id})){@Html.AntiForgeryT