Saltar al contenido

ASP.NET MVC: ¿cómo volver a cargar la misma vista después de publicar datos?

Posteriormente a mirar en varios repositorios y foros de internet al concluir hemos dado con la resolución que te enseñamos a continuación.

Solución:

como eso

[HttpPost]
public void Index(String address)

   TempData["address"] = address;
   RedirectToAction("Index");

lo ves en blanco porque estás redirigiendo RedirectToAction("Index"); y almacenando datos en TempData y no los estás usando en el índice Obtener método

[HttpGet]
public async Task Index()

    // I fetch the info from DB here put it inside ViewBag and call the view   
    // you must check for the temp data
    if (!string.IsNullOrWhiteSpace(TempData["address"].ToString()))
    
         ViewBag["result"] = TempData["address"];
         //and use you viewbag data in the view
    
    return View();

ese mecanismo del que te hablé…

si tengo una entidad de Dirección

public class Address

    public int Id  get; set; 
    public string Street  get; set; 
    public string House  get; set; 
    public int Floor  get; set; 

y estas son las acciones del controlador AddressController

[HttpGet]
public ActionResult Index()

    var model = new SearchAddressesViewModel();

    // you can here also fetch all the addresses in your db ... 
    //but this is not a good approach also, but if you need to do that it's easy

    // fetch data base and get all addresses
    //model.AddressesFound = db.Addresses.Select(a => new AddressModel
    //
    //    Street = a.Street,
    //    House = a.House,
    //    Floor = a.Floor
    //).ToList();

    return View(model);


[HttpPost]
public ActionResult Index(SearchAddressesViewModel model)

    if (!ModelState.IsValid)
        return View(model);

    // fetch data base and get addresses based on the search criteria in 
    //model.SearchCriteria
    // for example:
    //var addresses = db.Addresses.Where(a => a.Street == model.SearchCriteria);

    //add found addresses to model

    //model.AddressesFound = addresses.Select(a => new AddressModel
    //
    //    Street = a.Street,
    //    House = a.House,
    //    Floor = a.Floor
    //).ToList();

    return View(model);

y aquí está mi vista Index.cshtml

@model SearchAddressesViewModel

@using (Html.BeginForm("Index", "Address", FormMethod.Post))

    @Html.LabelFor(m => m.SearchCriteria);
    @Html.TextBoxFor(x=>x.SearchCriteria);
    @Html.ValidationMessageFor(m => m.SearchCriteria, "");

    
@if (Model.AddressesFound != null) @foreach (var item in Model.AddressesFound)
Street House Floor
@item.Street @item.House @item.Floor

y aquí está el modelo de vista que usé SearchAddressesViewModel y AddressModel

public class SearchAddressesViewModel

    [Required]
    [Display(Name = "Search for address")]
    public string SearchCriteria  get; set; 

    public IList AddressesFound  get; set; 


public class AddressModel

    public string Street  get; set; 
    public string House  get; set; 
    public int Floor  get; set; 

También puedes usar la vista parcial para AddressModel en la vista basada en su caso.

Espero que hayas entendido mi punto… gracias

Al final de la post puedes encontrar las reseñas de otros gestores de proyectos, tú incluso tienes la libertad de insertar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *