【问题标题】:MVC - view not passing back model list values to controller [duplicate]MVC - 视图不将模型列表值传递回控制器[重复]
【发布时间】:2016-05-15 09:21:40
【问题描述】:

我在从 mvc 中的一个简单视图将值发送回我的控制器时遇到问题。

在视图中,我有一个简单的表格,在用户选择下拉列表值时填充该表格。这是视图的摘录:

@model IList<RFQFreight.Models.TargetTransitTotal>

@using (Ajax.BeginForm("InputTimev2", "Target",
            new AjaxOptions
            {UpdateTargetId = "result", HttpMethod = "POST",
                InsertionMode = InsertionMode.Replace}))
{

<table class="tblTarTime">
            <thead>
                <tr><td>Select RFQ</td></tr>
            </thead>
            <tr>
                <td>
                    <select id="ddlTarTimRFQs" name="ddlTarTimRFQs">
                        @{
                            string getRfqUrlId =         HttpContext.Current.Request.QueryString["rfqid"];
                            if (getRfqUrlId == null){getRfqUrlId = "";}
                            List<string> rfqLst = ViewBag.rfqsLst;
                            rfqLst.Sort();
                       }
                        <option value=""></option>  
                        @foreach (var item in ViewBag.rfqsLst)
                        {
                            if (getRfqUrlId == item)
                            {<option value="@item" selected>@item</option>}
                            else{<option value="@item">@item</option>}
                        }
                    </select>
                </td>
            </tr>
        </table>

<table id="tblTarTime" class="tblTarTime">
            @if (ViewBag.rfqSelected == true)
        {

                <thead>
                    <tr>
                        <td>Route</td>
                        <td>Transit Target Time</td>
                    </tr>
                </thead>
                foreach (var item in Model)
                {
                    <tr>                               
                        @Html.HiddenFor(model => item.rfqId)                         
                    </tr>
                    <tr>
                        <td>
                            @Html.DisplayFor(model => item.serviceId)
                            @Html.HiddenFor(model => item.serviceId)
                        </td>
                        <td>
                            @Html.TextBoxFor(model => item.amount)
                            @Html.HiddenFor(model => item.amount)
                            @*<input type="text" value="@item.amount" />*@
                        </td>
                    </tr>
                }
                <tr><td colspan="2"></td></tr>
                <tr>
                    <td colspan="2">
                        @*<a href="#" class="linkSubmit" id="save">Save</a>*@
                        <input type="submit" value="Save" id="saveTarget" onclick="checkInputsTime(event)" />
                    </td>
                </tr>
            }
            else
            {
                <tr><th width="400">No Routes Available</th></tr>
            }
        </table>

以下是 [Get] 控制器函数的摘录:

public ActionResult InputTimev2(string rfqid = "")
    {
if (rfqid == "")
{
}else{
//page load after rfqid dropdown selection  
            var getLstTargetTransit = new List<TargetTransitTotal>();
            getLstTargetTransit = (from targetRows in db.TargetTransitTotals
                                    join rfqs in db.RFQMasters on      targetRows.rfqId equals rfqs.RfqId
                                    where rfqs.Status != "COMPLETED"   
                                    select targetRows).ToList();
            dynamic rfqLst = new List<string>();
            rfqLst = (from rfq in getLstTargetTransit orderby rfq.rfqId descending select rfq.rfqId).Distinct().ToList();
            ViewBag.rfqsLst = rfqLst;
            ViewBag.rfqSelected = true;

            var lstTargetTransit = new List<TargetTransitTotal>();
            lstTargetTransit = (from targetRows in getLstTargetTransit where targetRows.rfqId == rfqid
                                select targetRows).ToList();

            lstTargetTransit.RemoveRange(1, lstTargetTransit.Count - 1);
            return View(lstTargetTransit);
}

以下是 [POST] 控制器函数的摘录:

 [HttpPost]
    public ActionResult InputTimev2(List<TargetTransitTotal> model)
 {
    if (model != null)  //This value is showing as null
    {
    }
}

谁能向我解释为什么模型被发送并正确显示在视图中,但是当把它带回控制器(post)时,模型中什么都没有?

谢谢

【问题讨论】:

    标签: c# visual-studio model-view-controller razor mvvm


    【解决方案1】:

    我认为问题在于,您将值渲染两次:

    <td>
      @Html.DisplayFor(model => item.serviceId)
      @Html.HiddenFor(model => item.serviceId)
    </td>
    

    所以项目也被发送回控制器两次。 ModelBinder 无法决定使用哪一个。 尝试删除 HiddenFor()。

    【讨论】:

      猜你喜欢
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多