【问题标题】:Microsoft MVC : display an error or helpmessage overlayMicrosoft MVC:显示错误或帮助消息覆盖
【发布时间】:2015-08-11 03:04:52
【问题描述】:

当用户单击表单输入旁边的“帮助”图标或输入未通过验证规则时,我的 Web 表单会在叠加层中显示消息。

这些消息有时在用户通过数据输入表单工作时动态组合;消息的内容基于在其他输入元素中输入的值;因此消息不能是静态的,并且作为数据帮助消息内容保存在每个 HTML 元素中。

到目前为止,我一直在做这个客户端,但正在学习 MVC,并且想知道如何使用更改 Razor 视图的服务器端代码来完成同样的事情。

在客户端方法中,以下 javascript 切换 div 的可见性并注入 HTML 字符串以显示给用户。

function overlay(msgHTML) {
        el = document.getElementById("overlay");
        el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
        if (el.style.visibility=="visible") {
            msg = document.getElementById("errmsg");
            msg.innerHTML = msgHTML;
        }

    }

MVC5 与 Razor 的对应功能是什么?控制器中的 C# 如何切换 div 的可见性,或切换 css 类;以及如何注入错误消息内容?

同样,当用户使用表单时,这必须一遍又一遍地发生。表单第一次渲染的时候是未知的,所以它必须使用 Ajax 来完成。

【问题讨论】:

  • 请解释任何反对意见,因为我刚刚学习 MVC,不知道我的要求是否违反了范式。

标签: ajax razor asp.net-mvc-5


【解决方案1】:

如果您需要根据某些条件动态显示视图,那么您应该使用 PartialViews。您可以在服务器上渲染它们,然后使用 Ajax 获取字符串并将内容推送到某个 div 中:

您的控制器操作 - 该操作将通过Rendering the Partial View to a String 返回您希望在弹出窗口中显示的视图:

public ActionResult MyPartialPopupView(MyCriteria someCriteria)
{
    var returnData = new ReturnData{View = this.RenderViewToString("_MyPartialPopupView",someCriteria)};            
    return Json(returnData );
}

您可以根据您的 someCriteria 参数中的某些信息(例如帮助部分、错误部分等)动态确定要渲染的部分,从而扩展上述内容。

您的 _MyPartialPopupView.cshtml 部分视图 - 这是包含将在您的 MyPartialPopupView 操作中呈现的实际 html 的部分视图:

@model MyCriteria

<div>do your model bindings here</div>

然后,当你想使用它时,你会在你的 javascript 中做这样的事情:

$.ajax({
    url: "/Home/MyPartialPopupView",
    data: myCriteria,
    success: function (returnData) {  
        $("#myPopup").html(returnData.View); 
    }
});

【讨论】:

  • 感谢您提供有用的 PartialViews 信息。对于帮助消息场景,客户端可以请求控制器发回内容,客户端会将内容填充到它需要去的地方。这基本上就是我现在正在做的事情,没有 MVC 和 Razor。但是,如果验证移动到服务器端(例如,不再在客户端上使用类似敲除的东西)并且服务器需要向用户显示错误,那么是否有类似服务器到客户端“桥”的东西可以允许服务器调用客户端函数?
  • 服务器不能在 MVC 中调用客户端,除非你使用类似 SignalR 的东西。但是,您可以使用Ajax.Forms and MVC 来验证用户数据并显示一些错误。或者你的 returnData 对象可以有一个 Error 属性和一些你用来在客户端呈现错误的错误对象(可能使用敲除,但至少你的所有逻辑都是服务器端的)。我希望这会有所帮助。
  • 再次感谢 Ajax.Forms 和 SignalR 的链接。
猜你喜欢
  • 2012-08-17
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
相关资源
最近更新 更多