【问题标题】:Passing IEnumerable or list Model to Controller using HttpPost使用 HttpPost 将 IEnumerable 或列表模型传递给控制器
【发布时间】:2011-08-10 19:11:23
【问题描述】:

我有这个问题:

我的模型

public class SpesaTrasportoView
{ 
    public int SPESATRASPORTOVIEW_ID;
    public decimal PREZZO;
    public string DESCRIZIONE;
}

public class SpeseTrasportoView
{
    public List<MvcCart.Models.SpesaTrasportoView> SpeseTrasportoModello { get; set; }
    //public IList<string> Spese  { get; set; }
}

我的看法

@model MvcCart.Models.SpeseTrasportoView
@{
    ViewBag.Title = "Spese Trasporto";
    int counter = 0;
}

<div class="form-content">
<h2>Spese Trasporto</h2>
<p>
   Modifica e gestisci gli importi delle spese di trasporto.     
</p>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {

    <div class="data-content">
        <fieldset>
            <legend>Informazione Spese Trasporto</legend>
            @for (int i = 0; i < Model.SpeseTrasportoModello.Count; i++)
            {
                 <div class="editor-field">
                    @Html.TextBoxFor(m => m.SpeseTrasportoModello.ToList()[i].PREZZO)
                 </div>
            }


            <p>
               <input type="hidden" value="@ViewBag.FormStatus" id="Action" name="Action"/>
               <input type="submit" value="Salva" id="Salva" name="Salva"/>
            </p>
        </fieldset>
    </div>
}

</div>

我的控制器

[HttpPost]
public ActionResult SpeseTrasporto(SpeseTrasportoView model)
{
    //model.SpeseTrasportoModello is ever NULL :(((((
    return View();
}

当我提交模型时。SpeseTrasportoModello 为空!为什么mvc3不绑定数据???

【问题讨论】:

    标签: c# asp.net-mvc-3


    【解决方案1】:

    您需要解决一些问题。首先为您的模型,使一切属性。不要使用字段。

    型号:

    public class SpesaTrasportoView
    {
        public int SPESATRASPORTOVIEW_ID { get; set; }
        public decimal PREZZO { get; set; }
        public string DESCRIZIONE { get; set; }
    }
    
    public class SpeseTrasportoView
    {
        public List<SpesaTrasportoView> SpeseTrasportoModello { get; set; }
    }
    

    现在,更改视图中的 for 循环,使其看起来像这样:

    @for (int i = 0; i < Model.SpeseTrasportoModello.Count; i++)
    {
        var item = Model.SpeseTrasportoModello[i];
    
        <div class="editor-field">
            <input type="text" 
                   name="SpeseTrasportoModello[@i].PREZZO" 
                   value="@item.PREZZO" />
        </div>
    }
    

    您需要知道的关键是输入名称格式。它应该包含模型(您的列表)内的属性名称,并在方括号中带有索引,然后是此输入所针对的属性名称(例如 PREZZO)。

    【讨论】:

    • 我遇到了同样的问题。但问题仍然存在
    • 在这样做之后我也得到了错误。没有为这个对象定义无参数的构造函数。有什么想法吗??
    • @Jits 你的模型中有无参数构造函数吗?否则创建一个
    • 如何将整个模型“Model.SpeseTrasportoModello”传递给不同的Action方法?
    • @rANth var myModel= new MyObject{ Id =101, Name = "test" }; return RedirectToAction("Details","Store", myModel); );但您可以将 id 传递给另一个操作然后检索数据或使用 TempData["jsonmodel"] 这不是一个好主意
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2020-01-09
    • 1970-01-01
    • 2014-10-17
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多