代码之家  ›  专栏  ›  技术社区  ›  Geovani Martinez

MVC发布到另一个操作

  •  2
  • Geovani Martinez  · 技术社区  · 14 年前

    到细节…

    我正在做一个个人项目,基本上是一个任务列表。不管怎样,我设法获得了标准的添加、编辑、删除任务功能;现在我陷入了一个我知道必须非常简单的问题。我希望用户能够接受“详细信息”页中的任务,现在我可以轻松地将该选项放入下拉列表中,并允许用户选择该任务,然后保存;但我只希望提供一个链接,用户可以单击“接受任务”,该链接将转到“我的控制器操作”,并提取任务,然后更新“任务状态”字段。

    这是我的控制器动作

            //
        // 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;
            }
    
        }
    

    那么现在我如何从我的“详细信息”视图中调用这个操作呢?

    3 回复  |  直到 14 年前
        1
  •  2
  •   tvanfosson    14 年前

    一个包含按钮的小表单可以返回到AcceptTask操作。如果您愿意,它甚至可以是一个Ajax表单。

    <% using (Html.BeginForm("accepttask","task",new { id = Model.TaskId })) { %>
        <input type="submit" value="Accept Task" />
    <% } %>
    
        2
  •  1
  •   Aaronaught    14 年前

    链接(链接) <a> )无法发布表单,因此您有三个选择:

    1. 用按钮代替;
    2. 使用 <input type="image"> 相反,您可以巧妙地将其与链接类似;
    3. 使用javascript来完成。

    已经发布了一个关于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”文本(通过隐藏链接并显示一个确认元素,大概在同一个位置)。

        3
  •  1
  •   Mathias F    14 年前

    链接不应根据定义执行任何操作。这会导致奇怪的问题:当谷歌搜索你的网站时会发生什么?当有人刷新页面时会发生什么?当有人给网页加书签时会发生什么?

    更改内容的操作通常是由一个接一个发布完成的。首先发布到更改某些内容的操作(AcceptTask),然后重定向到显示结果的页面。在您的情况下,我建议您获取带有成功消息的任务列表。对于重定向后可用的消息,请使用tempdata。