首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ViewBag空着到达

ViewBag空着到达
EN

Stack Overflow用户
提问于 2019-07-16 19:08:23
回答 1查看 189关注 0票数 1

我有一个表单,在数据库中注册聊天,一切正常,问题是ViewBag,因为这会将消息传递给视图中的Javascript,这样就可以进行验证。当用户注册时,应该会出现一个成功消息,但是通过ViewBag,如果显示用户的数据,它就会以错误的形式出现在数据库中,因此唯一的问题将是ViewBag。

另外,当我再次运行时,消息成功的模式看起来还不错。

控制器

代码语言:javascript
复制
//Charlas
    public ActionResult CrearCharla()
    {
        List<ClsSede> listaSede = new List<ClsSede>();

        ClsSede Sede1 = new ClsSede();
        Sede1.sede_Text = "LIMA - SAN BORJA";
        Sede1.sede_Value = "LIMA - SAN BORJA";

        ClsSede Sede2 = new ClsSede();
        Sede2.sede_Text = "LIMA - LOS OLIVOS";
        Sede2.sede_Value = "LIMA - LOS OLIVOS";

        ClsSede Sede3 = new ClsSede();
        Sede3.sede_Text = "LIMA - CHORRILLOS";
        Sede3.sede_Value = "LIMA - CHORRILLOS";

        listaSede.Add(Sede1);
        listaSede.Add(Sede2);
        listaSede.Add(Sede3);

        ViewBag.Sedes = new SelectList(listaSede, "sede_Text", "sede_Value");

        return View(new ClsCharla());
    }

    [HttpPost]
    public ActionResult CrearCharla(ClsCharla charla)
    {

        List<ClsSede> listaSede = new List<ClsSede>();

        ClsSede Sede1 = new ClsSede();
        Sede1.sede_Text = "LIMA - SAN BORJA";
        Sede1.sede_Value = "LIMA - SAN BORJA";

        ClsSede Sede2 = new ClsSede();
        Sede2.sede_Text = "LIMA - LOS OLIVOS";
        Sede2.sede_Value = "LIMA - LOS OLIVOS";

        ClsSede Sede3 = new ClsSede();
        Sede3.sede_Text = "LIMA - CHORRILLOS";
        Sede3.sede_Value = "LIMA - CHORRILLOS";

        listaSede.Add(Sede1);
        listaSede.Add(Sede2);
        listaSede.Add(Sede3);

        ViewBag.Sedes = new SelectList(listaSede, "sede_Text", "sede_Value", charla.sede_Charla);

        //-----

        string message = "";

        try
        {
            ClsConexion con = new ClsConexion();
            var Cnx = con.Conexion();

            OracleCommand cmd = new OracleCommand("SIMEXA_SP_REGISTER_CHAT", Cnx);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new OracleParameter("param_titulo", OracleDbType.Varchar2)).Value = charla.titulo_Charla.Trim();
            cmd.Parameters.Add(new OracleParameter("param_descrip", OracleDbType.Varchar2)).Value = charla.descrip_Charla.Trim();
            cmd.Parameters.Add(new OracleParameter("param_fecha", OracleDbType.Varchar2)).Value = charla.fecha_Charla;
            cmd.Parameters.Add(new OracleParameter("param_hora", OracleDbType.Varchar2)).Value = charla.hora_Charla;
            cmd.Parameters.Add(new OracleParameter("param_lugar", OracleDbType.Varchar2)).Value = charla.lugar_Charla.Trim();
            cmd.Parameters.Add(new OracleParameter("param_sede", OracleDbType.Varchar2)).Value = charla.sede_Charla;
            cmd.Parameters.Add(new OracleParameter("param_requisito", OracleDbType.Varchar2)).Value = charla.requisito_Charla.Trim();
            Cnx.Open();

            OracleTransaction tx = Cnx.BeginTransaction();
            cmd.ExecuteNonQuery();
            tx.Commit();

            Cnx.Close();
            cmd.Dispose();
            Cnx.Dispose();

            message = "success";

        }
        catch
        {
            message = "error";
        }
        finally
        {
            ViewBag.message = message;
        }

        return RedirectToAction("MostraCharlas");

    }

视图

代码语言:javascript
复制
    @model wsCharlas.Models.ClsCharla

@{
    ViewBag.Title = "Create a Chat";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Create a Chat:</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <h4>Here you can place all the respective data of the chat you want to create.</h4>
    <hr />

    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <!--    <div class="form-horizontal"> -->
    <div class="form-group">
        @Html.HiddenFor(model => model.ID_Charla, htmlAttributes: new { @class = "control-label" })
        <div>
            @Html.HiddenFor(model => model.ID_Charla, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.ID_Charla, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.titulo_Charla, htmlAttributes: new { @class = "control-label" })
        <div>
            @Html.EditorFor(model => model.titulo_Charla, new { htmlAttributes = new { @class = "form-control", maxlength = "40" } })
            @Html.ValidationMessageFor(model => model.titulo_Charla, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.descrip_Charla, htmlAttributes: new { @class = "control-label" })
        <div>
            @Html.TextAreaFor(model => model.descrip_Charla, new { @id = "textArea", @class = "form-control", maxlength = "530" })
            @Html.ValidationMessageFor(model => model.descrip_Charla, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.fecha_Charla, htmlAttributes: new { @class = "control-label" })
        <div>
            @Html.EditorFor(model => model.fecha_Charla, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.fecha_Charla, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.hora_Charla, htmlAttributes: new { @class = "control-label" })
        <div>
            @Html.EditorFor(model => model.hora_Charla, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.hora_Charla, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.lugar_Charla, htmlAttributes: new { @class = "control-label" })
        <div>
            @Html.EditorFor(model => model.lugar_Charla, new { htmlAttributes = new { @class = "form-control", maxlength = "100" } })
            @Html.ValidationMessageFor(model => model.lugar_Charla, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.sede_Charla, htmlAttributes: new { @class = "control-label" })
        <div>
            @Html.DropDownListFor(model => model.sede_Charla, (SelectList)ViewBag.Sedes, "Select a Headquarters", new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.sede_Charla, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.requisito_Charla, htmlAttributes: new { @class = "control-label" })
        <div>
            @Html.EditorFor(model => model.requisito_Charla, new { htmlAttributes = new { @class = "form-control", maxlength = "100" } })
            @Html.ValidationMessageFor(model => model.requisito_Charla, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2">
            <input type="submit" value="Create a Chat" id="id_charla"  class="btn btn-success" />
        </div>
    </div>
    <!--</div> -->
}

<div>
    @Html.ActionLink("Return", "MostraCharlas", null, new { @class = "btn btn-primary" })
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

<style>
    #textArea{
        min-height: 62px;
        max-height: 135px;
    }
</style>

<script>

    var msg = '@ViewBag.message'

    $("#id_charla").on("click", function () {
        if (msg == 'success') {
            Swal.fire(
                        msg,
                        'A new chat was added!',
                        'success'
                     )
        } else {
            Swal.fire(
                        msg,
                        'Could not register your new chat, be sure to complete the entire form, if the problem continues to communicate with the computer area!',
                        'error'
                     )
        }   
    });

</script>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-16 23:30:35

要回答您的问题,我首先要说的是,在您的情况下,获得ViewBag的null实际上是正确的,因为您使用了RedirectToAction,这将使所有ViewBag数据无效。

ViewBag的生存期是当前请求,这意味着一旦尝试离开当前请求,它将变为空。因此,您需要在自己的情况下使用TempData

TempData是按会话存储方式存储的数据。两次请求之间的生命周期。它帮助数据从一个控制器传输到另一个控制器,或者从一个操作转移到另一个操作。您使用TempData的方式与使用视图数据或ViewBag的方式略有不同。

所以我给你两个选择。

First

使用TempData和ViewBag

在Post中,将最后一行更改为

代码语言:javascript
复制
finally
{
    TempData["message"] = message;
}

然后,在要重定向到的Get操作中,由于使用了RedirectToAction,获取TempData并将其传递给视图包。

代码语言:javascript
复制
var message = TempData ["message"];
If(message != null)
    ViewBag.message = message;

注释需要if语句来处理初始的get请求,这不是在未设置TempData时设置ViewBag的值。

第二

只使用TempData

代码语言:javascript
复制
finally
{
    TempData["message"] = message;
}

无论您决定使用哪种方式,访问方式都与您分配的方式相同,

代码语言:javascript
复制
TempData["message"] //for TempData
ViewBag.message //for ViewBag
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57063952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档