Asp.net mvc 4 您应该返回什么ActionResult来更新ActionLink文本?

Asp.net mvc 4 您应该返回什么ActionResult来更新ActionLink文本?,asp.net-mvc-4,Asp.net Mvc 4,我将MVC4与实体框架结合使用,和许多人一样,我是MVC新手,试图了解设计模式 我有一个局部视图,显示会话列表,后面是ActionLink,允许经过身份验证的成员预订会话 注意:为了清楚起见,我删掉了大部分代码,如果一个成员被预订到一个会话中,它会显示“预订”而不是操作链接 @using OnlineBookings.Website.Models @{ DateTime currentDate = DateTime.MinValue.Date; } <form method="post"

我将MVC4与实体框架结合使用,和许多人一样,我是MVC新手,试图了解设计模式

我有一个局部视图,显示会话列表,后面是ActionLink,允许经过身份验证的成员预订会话

注意:为了清楚起见,我删掉了大部分代码,如果一个成员被预订到一个会话中,它会显示“预订”而不是操作链接

@using OnlineBookings.Website.Models
@{ DateTime currentDate = DateTime.MinValue.Date; }

<form method="post" action="~/Controllers/BookSessionController.cs">
@foreach (SessionsWithBookingInformation s in Model)
{
  <p>@s.StartTime.ToString("t") 
            @s.Description 
            @Html.ActionLink(
                            "Book", 
                            "BookSession", 
                            new { sessionId = s.SessionId } 
                            ) 
   </p>
}    
</form>
所有这些都很好地工作,预订被有效地记录下来

但是,我想弄清楚的是,
BookSession
函数的返回是否可以更新actionlink文本

理想情况下,如果成功,我想用“预订”一词替换部分视图中的ActionLink,如果失败,我想用“会话已满”之类的失败条件替换它

或者我可以只更新我的局部视图,因为这会做同样的事情


我是不是错过了一些简单的东西?或者,我是不是找错人了?

你的问题很好,解释得很好,但也有点模糊,因为这是一个有点“我该怎么做?”的问题。以下是一些可能帮助您开发解决方案的选项

  • 重新显示相同的视图。返回用户所在的视图,以便他们提交链接。这看起来像是一个简单的刷新

    return View();
    
  • 通过AJAX提交请求,并通过局部视图进行更新。
    span
    或类似HTML元素上添加
    id
    标记,其中包含个人预订的详细信息。使用AJAX提交请求,可能通过
    @AJAX.ActionLink
    ,并让您的操作返回部分视图

    return PartialView("_OnlineBookingPartial", model);
    
    返回部分视图后,使用返回的数据更新特定预订

  • 再次使用AJAX,但返回JSON。另一种方法可能是再次使用AJAX,但返回JSON并对其进行处理。例如,您可以返回将
    Book
    替换为的文本;i、 e.“会话已满”或“已预订!”

  • 就我个人而言,我可能会使用AJAX来更新非AJAX(非Javascript)回退

    您可以通过使用
    @Ajax.ActionLink
    并检查请求是否在您的控制器操作中来完成

    if (Request.IsAjaxRequest) {
        return PartialView("_OnlineBookingPartial", model);
    }
    
    return View();
    

    这意味着,如果浏览器启用了Javascript并支持AJAX,那么将使用它,整个过程对于用户来说将是无缝和即时的。如果禁用Javascript,页面将只刷新。

    谢谢Rowan,我同意这确实是一个“从这里到哪里”的问题。我将重构并尝试一下:)
    return new JsonResult
        {
            Data = "Booked!"
        }
    
    if (Request.IsAjaxRequest) {
        return PartialView("_OnlineBookingPartial", model);
    }
    
    return View();