这里我试图在控制器上点击创建按钮时,将Bootstrap警报类添加到ViewBag.message中显示的异常中。但是添加类会显示异常'string'不包含'cssClass'的定义。
以下是Create.cshtml
@model WebApplication8.Models.Info
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<div class="errormsg">
@ViewBag.message
</div>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Info</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.des, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.des, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.des, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
以下是控制器中的创建操作方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "id,name,des")] Info info)
{
try
{
if (ModelState.IsValid)
{
db.create(info);
return RedirectToAction("Index");
}
}
catch (Exception ex)
{
ViewBag.message = ex.Message;
ViewBag.message.cssClass = "alert alert-danger";
return View(info);
}
return View(info);
}
以下是Interface Implementer class
public class StudentInfo : IStudentInfo
{
private AbcdEntities db1 = new AbcdEntities();
public void create(Info info)
{
if (info.name!=null)
{
if (info.des!=null)
{
db1.Infoes.Add(info);
db1.SaveChanges();
}
else
{
throw new Exception("Des Cannot Be Empty");
}
}
else
{
throw new Exception("Name Cannot Be Empty");
}
}
答案 0 :(得分:0)
ViewBag.message = ex.Message;
为ViewBag分配一个属性 message ,向它传递一个简单的字符串Exception.Message。
ViewBag.message.cssClass = "alert alert-danger";
然后,您尝试访问字符串的不存在的属性。
我认为你需要更好地理解动态的 viewBag 的使用方式,并且MVC提出他的方式来处理视图他们用Razor。
如果你想在viewBag中创建一个复杂的对象,你需要创建一个类似于动态的东西:
ViewBag.Message = new { Text= ex.Message, CssClass = "alert alert-danger" }
然后以这种方式使用它:
<div class="errormsg @ViewBag.Message.CssClass">
@ViewBag.Message.Text
</div>
如果它是在视图中表示返回消息的循环方式,则可以创建一个viewModel类来表示消息并在Razor中创建帮助以将此呈现规则封装在一个位置
答案 1 :(得分:0)
我已经完成了以下操作,以便使用Tempdata执行您正在寻找的内容。
@*Display any messages returned from other views*@
<div>
@*Error Message*@
@if (TempData["error"] != null)
{
<div class="alert alert-danger">@TempData["error"]</div>
}
</div>
您需要检查Viewbag.message是否为