【问题标题】:IEnumerable Property can't return the valueIEnumerable 属性无法返回值
【发布时间】:2013-12-15 06:56:19
【问题描述】:

我有 ViewModel

public class Magazine_ViewModel
{
    public int MagId { get; set; }
    public string MagNo { get; set; }
    public IEnumerable<Titles_ViewModel> Titles { get; set; }
}

public class Titles_ViewModel
{
    public int TitleId { get; set; }
    public string TitleName { get; set; }
    public int pos { get; set; }
}

在控制器中我喜欢这样

        var viewModel = new Magazine_ViewModel
        {
            Titles = numberTitles
                .Select(c => new Titles_ViewModel
                {
                    TitleId = c.TitleId,
                    TitleName = c.Title.TitleText,
                    pos=c.position
                }).ToList()
        };                    
        viewModel.MagNo = magazine.MagNo.ToString();
        viewModel.MagId = magazine.Id;

当我检查 viewModel.Titles 有 n 条记录时,这是正确的。 现在在视图部分

     <div class="editor-label">
        @Html.LabelFor(model => model.MagNo)
    </div>
    <div class="editor-field">
     @Html.EditorFor(model => model.MagNo)
    </div>

    <div class="editor-field">
     @Html.ListBox("wholeTitles")
     <input type="button" name="add" id="add" value="add" onclick="addValue()" /><input type="button" name="remove" id="remove" value="remove"  onclick="removeValue()"/>
      @Html.ListBoxFor(model => model.Titles, new SelectList(Model.Titles, "TitleId", "TitleName"))
    </div>
     <p>
        <input type="submit" value="Save" />
    </p>

我将新标题从第一个 ListBox(wholeTitles) 添加到第二个 ListBox(Titles)。现在提交按钮被按下,我想将新标题添加到数据库中。

这就是我在 Post Action 中所做的事情

     [HttpPost]
    public ActionResult EditTitle(Magazine_ViewModel magazineViewModel)
    {

        if (ModelState.IsValid)
        {
            var magazineTitles = new Magazine
            {
                Id = magazineViewModel.MagId,
                NumberTitles = new List<NumberTitle>()
            };

            foreach (var numberTitle in magazineViewModel.Titles)
            {

                    NumberTitle newNumberTitle = new NumberTitle();
                    newNumberTitle.MagazineId = magazineViewModel.MagId;
                    newNumberTitle.TitleId = numberTitle.TitleId;
                    newNumberTitle.position = 0;
                    unitOfWork.NumberTitleRepository.Insert(newNumberTitle);

            }
        }
        return View();
    }

但是 magazineViewModel.Titles 显示为 null,我不知道我应该检查什么才能看到它为什么是 null 值。

【问题讨论】:

  • 您的提交是否包含在 Html.BeginForm 中?如果可以,请更新代码的外观。还有什么是 POST Action 方法签名?
  • 是的,它在 BeginForm 部分内。当我提交 EditTitle 获得焦点时,magazineViewModel 具有 MagNo 和 MagId 的值,但 Titles 为空
  • 我认为如果您使用隐藏字段,您可以将值传递回服务器。请参阅下面的答案。

标签: asp.net-mvc asp.net-mvc-3 model-view-controller


【解决方案1】:

您的值不会被发送回服务器。在您的视图中使用以下。这应该将标题发布回同一 ViewModel 中的服务器

    for (var i = 0; i < Model.Titles.Count(); i++)
    {
        @Html.HiddenFor(m => m.Titles[i].TitleId)
        @Html.HiddenFor(m => m.Titles[i].TitleName)
    }

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多