Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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# 在ASP.NET5、MVC6中显示自定义错误消息_C#_Model View Controller_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 在ASP.NET5、MVC6中显示自定义错误消息

C# 在ASP.NET5、MVC6中显示自定义错误消息,c#,model-view-controller,asp.net-core,asp.net-core-mvc,C#,Model View Controller,Asp.net Core,Asp.net Core Mvc,我有一个方法是调用api方法。该api方法包含insert、update和delete的SQL语句。但当存储过程抛出任何错误时,如何在前面显示为错误消息。我正在使用ASP.NET5和MVC6。我的方法如下: [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<IActionResult> Method(Model model) { string url = Configuration

我有一个方法是调用api方法。该api方法包含insert、update和delete的SQL语句。但当存储过程抛出任何错误时,如何在前面显示为错误消息。我正在使用ASP.NET5和MVC6。我的方法如下:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Method(Model model)
{
    string url = ConfigurationSettingHelper.BaseUrl + "apiurl";

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(url);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = await client.PostAsJsonAsync<Model>(url, model);

        if (response.IsSuccessStatusCode)
        {
            var data = await response.Content.ReadAsStringAsync();
            var Msg = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(data);

            if (!string.IsNullOrEmpty(Convert.ToString(Msg)))
            {
                //Here code to display error message.
            }
        }
    }
    return View();
}
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务方法(模型)
{
字符串url=ConfigurationSettingHelper.BaseUrl+“apiurl”;
使用(var client=new HttpClient())
{
client.BaseAddress=新Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessage response=wait client.postsjsonAsync(url,型号);
if(响应。IsSuccessStatusCode)
{
var data=await response.Content.ReadAsStringAsync();
var Msg=Newtonsoft.Json.JsonConvert.DeserializeObject(数据);
如果(!string.IsNullOrEmpty(Convert.ToString(Msg)))
{
//此处显示错误消息的代码。
}
}
}
返回视图();
}
帮助我在页面上显示Msg变量字符串消息


谢谢

您可以使用
Response.Write(str)
在代码隐藏和.ASPX页面上:

<%
Response.Write(str)
%>
代码隐藏:

lblText.Text = "Hello world"
以HTML格式输出:

<span id="lblText">Hello World</span>

您可以在代码隐藏和.ASPX页面上使用
Response.Write(str)

<%
Response.Write(str)
%>
代码隐藏:

lblText.Text = "Hello world"
以HTML格式输出:

<span id="lblText">Hello World</span>

我认为有几种方法可以实现这一点

1) 使用可存储
错误列表的ViewModel,您可以将其传回视图。尽管对所有视图执行此操作会非常重复,并且不容易维护

2) 使用TempData存储错误消息,而不是在ViewModel中。这样,如果TempData中有任何项目,您可以签入_Layout.cshtml,并以您希望的任何方式显示它们(这将发生在所有视图中)

3) 使用toastr.js和TempData方法来显示一个漂亮的toast。首先实现一个POCO,其中包括toasrt.js中可用的不同响应类型的枚举,即错误、信息、成功、警告。然后,创建控制器将实现的BaseController.cs文件,请参见下面的示例

接下来在控制器中,您可以调用CreateNotification(AlertType.Error,“这是一条测试消息。”,“Error”)

最后,您需要将逻辑放入_Layout.cshtml文件中以利用通知。确保添加了对toastr.js及其CSS文件的引用,并查看下面的示例以了解如何连接它:

完整示例:

Notification.cs

```

```

BaseController.cs

public override void OnActionExecuting(ActionExecutingContext context)
    {            
        GenerateNotifications();    

        base.OnActionExecuting(context);
    }

public void CreateNotification(Notification.AlertType type, string message, string title = "")
    {
        Notification.Alert toast = new Notification.Alert();
        toast.Type = type;
        toast.Message = message;
        toast.Title = title;

        List<Notification.Alert> alerts = new List<Notification.Alert>();

        if (this.TempData.ContainsKey("alert"))
        {
            alerts = JsonConvert.DeserializeObject<List<Notification.Alert>>(this.TempData["alert"].ToString());
            this.TempData.Remove("alert");
        }

        alerts.Add(toast);

        JsonSerializerSettings settings = new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.All
        };

        string alertJson = JsonConvert.SerializeObject(alerts, settings);

        this.TempData.Add("alert", alertJson);
    }

    public void GenerateNotifications()
    {
        if (this.TempData.ContainsKey("alert"))
        {               
            ViewBag.Notifications = this.TempData["alert"];
            this.TempData.Remove("alert");
        }
    }
public override void OnActionExecuting(ActionExecutingContext上下文)
{            
生成化();
base.OnActionExecuting(上下文);
}
public void CreateNotification(Notification.AlertType类型,字符串消息,字符串标题=”)
{
Notification.Alert toast=new Notification.Alert();
toast.Type=Type;
toast.Message=消息;
toast.Title=标题;
列表警报=新列表();
if(this.TempData.ContainsKey(“警报”))
{
alerts=JsonConvert.DeserializeObject(this.TempData[“alert”].ToString());
此.TempData.Remove(“警报”);
}
添加(toast);
JsonSerializerSettings设置=新的JsonSerializerSettings
{
TypeNameHandling=TypeNameHandling.All
};
字符串alertJson=JsonConvert.SerializeObject(警报、设置);
this.TempData.Add(“警报”,alertJson);
}
公共无效生成通知()
{
if(this.TempData.ContainsKey(“警报”))
{               
ViewBag.Notifications=this.TempData[“警报”];
此.TempData.Remove(“警报”);
}
}
Layout.cshtml

@if (ViewBag.Notifications != null)
    {
        JsonSerializerSettings settings = new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.All
    };
    List<Notification.Alert> obj = JsonConvert.DeserializeObject<List<Notification.Alert>>(ViewBag.Notifications, settings);

    foreach (Notification.Alert notification in obj)
    {
        switch (notification.Type)
        {
            case Notification.AlertType.Success:
                <script type="text/javascript">toastr.success('@notification.Message', '@notification.Title');</script>
                break;
            case Notification.AlertType.Error:
                <script type="text/javascript">toastr.error('@notification.Message', '@notification.Title');</script>
                break;
            case Notification.AlertType.Info:
                <script type="text/javascript">toastr.info('@notification.Message', '@notification.Title');</script>
                break;
            case Notification.AlertType.Warning:
                <script type="text/javascript">toastr.warning('@notification.Message', '@notification.Title');</script>
                break;
        }
    }
}
@if(ViewBag.Notifications!=null)
{
JsonSerializerSettings设置=新的JsonSerializerSettings
{
TypeNameHandling=TypeNameHandling.All
};
List obj=JsonConvert.DeserializeObject(ViewBag.Notifications,settings);
foreach(obj中的Notification.Alert通知)
{
开关(notification.Type)
{
案例通知.AlertType.Success:
toastr.success('@notification.Message','@notification.Title');
打破
案例通知.AlertType.Error:
toastr.error('@notification.Message','@notification.Title');
打破
案例通知.AlertType.Info:
toastr.info('@notification.Message','@notification.Title');
打破
案例通知.AlertType.Warning:
toastr.warning('@notification.Message','@notification.Title');
打破
}
}
}

我认为有几种方法可以实现这一点

1) 使用可存储
错误列表的ViewModel,您可以将其传回视图。尽管对所有视图执行此操作会非常重复,并且不容易维护

2) 使用TempData存储错误消息,而不是在ViewModel中。这样,如果TempData中有任何项目,您可以签入_Layout.cshtml,并以您希望的任何方式显示它们(这将发生在所有视图中)

3) 使用toastr.js和TempData方法来显示一个漂亮的toast。首先实现一个POCO,其中包括toasrt.js中可用的不同响应类型的枚举,即错误、信息、成功、警告。然后,创建控制器将实现的BaseController.cs文件,请参见下面的示例

接下来在控制器中,您可以调用CreateNotification(AlertType.Error,“这是一条测试消息。”,“Error”)

决赛
@if (ViewBag.Notifications != null)
    {
        JsonSerializerSettings settings = new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.All
    };
    List<Notification.Alert> obj = JsonConvert.DeserializeObject<List<Notification.Alert>>(ViewBag.Notifications, settings);

    foreach (Notification.Alert notification in obj)
    {
        switch (notification.Type)
        {
            case Notification.AlertType.Success:
                <script type="text/javascript">toastr.success('@notification.Message', '@notification.Title');</script>
                break;
            case Notification.AlertType.Error:
                <script type="text/javascript">toastr.error('@notification.Message', '@notification.Title');</script>
                break;
            case Notification.AlertType.Info:
                <script type="text/javascript">toastr.info('@notification.Message', '@notification.Title');</script>
                break;
            case Notification.AlertType.Warning:
                <script type="text/javascript">toastr.warning('@notification.Message', '@notification.Title');</script>
                break;
        }
    }
}