海峡的细节......
我正在开展一个个人项目,基本上它是一个任务列表。无论如何;我设法让标准的添加,编辑,删除任务功能顺利;现在我被困在一些我知道必须非常简单的东西上。我希望用户能够从详细信息页面接受任务,现在我可以轻松地将该选项放在下拉列表中,并允许用户选择它然后保存;但我想提供一个链接,他们可以单击“接受任务”链接然后转到我的控制器操作并拉动任务然后更新TaskStatus字段。
这是我的控制器动作
//
// TaskStatus Updates
[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult AcceptTask(int id)
{
Task task = taskRepository.GetTask(id);
try
{
task.TaskStatus = "Accepted";
taskRepository.Save();
return RedirectToAction("Details", new { id = task.TaskId });
}
catch (Exception)
{
throw;
}
}
那么现在如何在“详细信息”视图中调用此操作?
答案 0 :(得分:2)
包含一个回发到AcceptTask操作的按钮的小表单将起作用。如果你愿意,它甚至可以是一个AJAX形式。
<% using (Html.BeginForm("accepttask","task",new { id = Model.TaskId })) { %>
<input type="submit" value="Accept Task" />
<% } %>
答案 1 :(得分:1)
链接(<a>
)无法发布表单,因此您有三种选择:
<input type="image">
,您可以将其看作类似于链接; 已经为#1发布了一个答案,很容易修改为#2。我将为#3发布一个jQuery示例,尽管您可以使用任何JS库:
<a id="acceptTaskLink" href="#">Accept</a>
<span id="accepted" style="display: none">Accepted</span>
...
<script type="text/javascript">
$('#acceptTaskLink').click(function() {
$.post('/site/task/accept',
function(result) {
$('#acceptTaskLink').hide();
$('#accepted').show();
});
});
</script>
此脚本向控制器发出Ajax帖子,然后在成功发布后,它将“Accept”链接更改为常规的“Accepted”文本(通过隐藏链接并显示确认元素,可能在同一个地方)。
答案 2 :(得分:1)
根据定义,链接不应执行任何操作。这导致了一些奇怪的问题:当Google抓取您的网站时会发生什么?当有人刷新页面时会发生什么?当有人为该页面添加书签时会发生什么?
改变内容的动作通常是通过post post发布的。首先发布更改内容的Action(AcceptTask),然后重定向到显示结果的页面。在你的情况下,我建议获取成功消息的任务列表。重定向使用Tempdata后,Mesage可用。