如何在控制器的viewbag中添加警报类

时间:2017-02-22 06:22:42

标签: asp.net-mvc entity-framework

这里我试图在控制器上点击创建按钮时,将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");
        }
    }

2 个答案:

答案 0 :(得分:0)

ViewBag.message = ex.Message;

为ViewBag分配一个属性 message ,向它传递一个简单的字符串Exception.Message。

ViewBag.message.cssClass = "alert alert-danger";

然后,您尝试访问字符串的不存在的属性。

我认为你需要更好地理解动态 viewBag 的使用方式,并且MVC提出他的方式来处理视图

如果你想在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是否为