我无法将id从视图发送到控制器

时间:2015-03-17 13:23:31

标签: c# asp.net-mvc

@model IEnumerable<Evidencija.Models.Vozilo>

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

<h2>PokreniIzvjestaj</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Vozilo</legend>

        <p>

    @Html.DropDownList("Vozila", Model.Select(p => new SelectListItem { Text = p.VoziloID.ToString(), Value = p.VoziloID.ToString() }), "Izaberi vozilo")

        </p>

         <input type="submit" value="Dodaj stavku" />

    </fieldset>
}

我想用下拉列表将表vozilo的id发送到控制器。 控制器接受vozilo作为参数,但它是ollways零。 如何在不使用viewmodel的情况下解决此问题。

    [HttpPost]
    public ActionResult PokreniIzvjestaj(Vozilo v)
    {
        ReportClass rpt = new ReportClass();
        rpt.FileName = Server.MapPath("~/Reports/Vozilo.rpt");
        rpt.Load();

        //ReportMethods.SetDBLogonForReport(rpt);

        //ReportMethods.SetDBLogonForSubreports(rpt);

       // rpt.VerifyDatabase();

        rpt.SetParameterValue("@VoziloId",v.VoziloID);

        Stream stream = null;

        stream = rpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
         return File(stream, "application/pdf",  "Vozilo.pdf");
        //PortableDocFormat--pdf format
        //application/pdf -- vezan za pdf format, ako je drugi tip mjenja se u zavisnosti od izabranog
        //naziv.pdf -- naziv dokumenta i izabrana ekstenzija

    }

    [HttpGet]
    public ActionResult PokreniIzvjestaj()
    {
        var vozila = db.Voziloes.ToList();
        return View(vozila);
    }

controler有两种方法。

1 个答案:

答案 0 :(得分:0)

您目前将下拉列表绑定到名为Vozilo的属性。 <select>回发单个值(在您的情况下为VoziloID或所选选项。您的POST方法然后尝试将复杂对象Vozilo绑定到int(假设{ {1}} int VoziloID is typeof null`。您可以解决此问题,将方法更改为

) which of course fails and the model is

参数[HttpPost] public ActionResult PokreniIzvjestaj(int Vozilo) 现在将包含所选Vozilo的值。

但是,当使用视图模型正确的方法时,不清楚为什么要“在不使用viewmodel的情况下解决这个问题”

查看模型

VoziloID

控制器

public class VoziloVM
{
  [Display(Name = "Vozilo")]
  [Required(ErrorMessage = "Please select a Vozilo")]
  public int? SelectedVozilo { get; set; }
  public SelectList VoziloList { get; set; }
}

查看

public ActionResult PokreniIzvjestaj()
{
  var viziloList = db.Voziloes.Select(v => v.VoziloID);
  VoziloVM model = new VoziloVM();
  model.VoziloList = new SelectList(viziloList)
  model.SelectedVozilo = // set a value here if you want a specific option selected
  return View(model);
}

[HttpPost]
public ActionResult PokreniIzvjestaj(VoziloVM model)
{
  // model.SelectedVozilo contains the value of the selected option
  ....
}