pola typu long w obiekcie są zerowane po powrocie z View do kontrolera metodą HttpPost (ASP.NET)

0

Dzień dobry

Z pewnego powodu w obiektach posługuję się polami typu long. Wysyłam te obiekty po zawarciu ich w wybranym obiekcie ModelView z kontrolera przy pomocy View w ASP.NET( C# ) i mam kłopoty z ich obsługą przy zwracaniu ich do kontrolera np. pola typu long w obiektach powracające są zerowane jak to rozwiązać ?

powrót ich obsługuję w ten sposób

 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include =
0

Bez kodu raczej nikt nie wywróży.

0

obiekt view model

 public class DokumentPzViewModel
    {
        public int nrMagazynu { set; get; }
        public String nazwaMagazynu { set; get; }
        public int nrDostawcy { set; get; }
        public String nazwaDostawcy{ set; get; }

        public long testId { set; get; }

        public int? wybranyMagazynId { set; get; }
        public int? wybranyDostawcaId { set; get; }

        public DokumentPzNaglowekDTO NaglowekPzDTO { get; set; }

        public List<DokumentPzPozycjaDTO> PozycjePzDTO { get; set; }

        public List<MagazynDTO> MagazynyDTO { get; set; }

        public List<DostawcaDTO> DostawcyDTO { get; set; }

    }

pole testId ustawiam na 10

public ActionResult Create()
        {

           ......
            mDokumentPzViewModel.testId = 10;



            return View(mDokumentPzViewModel);
        }


wysyłam do pliku cshtml o kodzie


@model HurtowniaWebMVC.DokumentPzViewModel

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

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

....................................................

 <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>

w kontrolerze w tej funkcji odczytuję w debugerze wartość pola testId = 0 zeruje go bez żadnych zmian w polu w pliku cshtml


 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "NaglowekPzDTO,wybranyMagazynId,wybranyDostawcaId,testId")]   DokumentPzViewModel mDokumentPzViewModel)
        {
            if (ModelState.IsValid)
            {
                ............
                return RedirectToAction("Index");
            }
            return View(mDokumentPzViewModel);
        }

0

Najważniejsze wykropkowales :) masz w formularzu jakiś ukryty input z wartością testId?

0

nie, wartości tej nawet nie wyświetlam, dodałem tylko pole w obiekcie dla testu, teraz

1

wartości do view modelu są brane(bindowane) z requesta, skoro w requescie nigdzie nie masz ustawionej wartości to dostajesz 0.
ergo musisz dodać do formy ukryty input z tą wartością.
@html.Hidden("testId ") lub @html.HiddenFor(m => m.testId )

0

super dzięki działa, jest to dopuszczalne rozwiązanie nikt mi nie będzie stawiał uwag do kodu ?

czy jest inny sposób przesłania wartości long do view - cshtml i pobrania jej z powrotem w kontrolerze ?

1

Co Ci tam kto będzie stawiał to trudno powiedzieć, ale w taki właśnie sposób realizuje się przesyłanie danych.
Kontroler musi dostać dane w żądaniu (albo jakoś inaczej je odczytać, z sesji, bazy danych innego serwisu itp). W takim przypadku (kontorler -> view -> kontroler) zawsze musi być jakieś żądanie z "przeglądarki" (lub innego klienta) i w tym żądaniu musisz przesłać wszystkie dane, których potrzebuje kontroler.

0

Nie pamiętam już za bardzo tego frameworka, ale zdaje się, że można spróbować z TempData w tej sytuacji.

0

dziękuję za odpowiedzi

1 użytkowników online, w tym zalogowanych: 0, gości: 1