Pass value from view bag to view

0

I'm trying to pass value from a view bag to the view create.

Controller

public ActionResult Create()
{
    ViewBag.BanhoTosaId = new SelectList(db.BanhoTosas, "BanhoTosaId", "Tipo");


    if (ViewBag.BanhoTosaId.SelectedValue != null)
    {
        BanhoTosa BT = db.BanhoTosas.Find(ViewBag.BanhoTosaId);
        decimal valorSoma = BT.Valor + 10;
        ViewBag.Total = valorSoma;
    }
    else
    {
        ViewBag.Total = 0;
    }

    return View();
}

In case BT will take the value in the bath table and cough and add another 10, and then will return the value of the sum in the viewbag.Total.

View

<div class="form-group">
    @Html.LabelFor(model => model.Total, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Total, new { htmlAttributes = new { @class = "form-control", value = "@ViewBag.Total" } })
        @Html.ValidationMessageFor(model => model.Total, "", new { @class = "text-danger" })
    </div>
</div>

value="@ ViewBag.Total" was supposed to receive the value of the ViewBag.

    
asked by anonymous 08.03.2018 / 12:51

1 answer

0

Then the most correct would be to create a ViewModel for this view, for example:

public class CreateBanhoTosaViewModel
{
    public int? Total { get; set; }
}

Then use in your controller something like this:

public ActionResult Create()
{
    //aqui você seleciona o valor do total
    var viewModel = new CreateBanhoTosaViewModel { Total = 1 };

    return View(viewModel);
}

Your view will have to reference this view model using @model , it will look like this:

@model App.Models.CreateBanhoTosaViewModel

<div class="form-group">
    @Html.LabelFor(x => x.Total, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(x => x.Total, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(x => x.Total, "", new { @class = "text-danger" })
    </div>
</div>

This way you will be using the framework correctly.

In any case, if you prefer to continue using @ViewBag , you would have to write the control in hand like this:

<input name="Total" id="Total" value="@ViewBag.Total" />

I do not recommend you use this option.

    
09.03.2018 / 22:38