我有一个调用api方法的方法。该api方法包含insert,update,delete的SQL语句。但是当从存储过程中抛出任何错误时,如何在前面显示为错误消息。我正在使用ASP .NET 5和MVC 6.我的方法如下:
[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();
}
帮助我在页面上显示Msg变量字符串消息。
谢谢
答案 0 :(得分:4)
我认为有几种方法可以实现这一目标。
1)使用ViewModel,它可以存储您可以传递回视图的List<string> Errors
。虽然为所有视图执行此操作会非常重复并且不易维护。
2)使用TempData存储错误消息而不是ViewModel。这样,如果TempData中有任何项目,您可以检查_Layout.cshtml,并以您希望的任何方式显示它们(这会发生在您的所有视图中)。
3)使用toastr.js和TempData方法来显示一个漂亮的吐司。首先实现一个POCO,其中包含一个Enum,用于toastr.js中可用的不同响应类型,即错误,信息,成功,警告。然后,创建一个控制器将实现的BaseController.cs文件,请参阅下面的示例。
接下来在您的控制器中,您可以调用CreateNotification(AlertType.Error,&#34;这是测试消息。&#34;,&#34;错误&#34;);
最后,您需要将逻辑放入_Layout.cshtml文件以使用通知。确保添加对toastr.js及其CSS文件的引用,并参阅下面的示例,了解如何连接它:
完整示例:
Notification.cs
```
public class Alert
{
public AlertType Type { get; set; }
public string Message { get; set; }
public string Title { get; set; }
}
public enum AlertType
{
Info,
Success,
Warning,
Error
}
```
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");
}
}
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;
}
}
}
答案 1 :(得分:0)
您可以在代码隐藏和.ASPX页面中使用Response.Write(str)
:
<%
Response.Write(str)
%>
在代码隐藏中使用Response.Write()
将字符串放在页面的HTML之前,因此它并不总是有用。
您还可以在ASPX页面的某处创建服务器控件,例如标签或文字,并在代码隐藏中设置该控件的文本或值:
.ASPX:
<asp:Label id="lblText" runat="server" />
代码隐藏:
lblText.Text = "Hello world"
HTML格式的输出:
<span id="lblText">Hello World</span>
如果您不想添加,请使用文字:
<asp:Literal id="litText" runat="server" />
并设置文字的value属性而不是text属性:
litText.Value = "Hello World"