【问题标题】:Why can I not return a Null Value?为什么我不能返回 Null 值?
【发布时间】:2019-08-26 22:39:51
【问题描述】:

我正在创建一个应用程序,用户可以在其中保存已购买食品的库存。当新用户创建他们的储藏室时,他们可以选择创建新成分或添加其他用户之前提交的成分(即,如果其他用户的储藏室中已经有这种名为鸡胸肉的新成分,则无需创建此成分)。

在我的视图页面上,我有一个表单,用户可以在其中选择已添加的成分以添加到他们自己的储藏室中。现在,我可以毫无问题地显示数据库中的所有成分,并将这些成分添加到当前用户的储藏室中。

我正在尝试添加一个搜索/过滤功能,允许用户搜索数据库中已有的成分。这样一来,他们就不必滚动数百个项目来准确找到他们想要添加的内容,或者确定他们是否必须创建这种成分,因为其他用户在他们的数据库中没有该成分。

查看 (newIngredients.cshtml)

@model AddIngredientsView

@{
    ViewBag.Title = "Pantry Setup";
    ViewBag.HeaderText = "Add Your First Set of Ingredients To Your Pantry";
    Layout = "~/Views/Home/_Layout.cshtml";
}

<div class="formBox">
    <form asp-action="CreateIngredients" asp-contoller="Home" method="post">
        <h3>Existing Ingredients</h3>
        @using (Html.BeginForm("NewIngredients", "Home", FormMethod.Get))
        {
            @Html.TextBox("searching")<input type="submit" value="Search">
        }
        @for(int i =0; i < Model.AllIngredients.Count; i++){
            @Html.HiddenFor(m => m.AllIngredients[i].id);
            <label asp-for="IsAddedIngredient[i]">@Model.AllIngredients[i].Name</label>
            <input type="checkbox" asp-for="IsAddedIngredient[i]">

            <label asp-for="AddIngredientsQuantity[i]">Quantity</label>
            <input type="number" step="0.01" asp-for="AddIngredientsQuantity[i]">
            <br>
        }
</div>

视图模型 (AddIngredientsView.cs)

using System.Collections.Generic;

namespace ThisProject.Models{
    public class AddIngredientsView{
        public Merchant Merchant{get;set;}

        public List<Ingredient> AllIngredients{get;set;}

        public List<string> AddIngredientsQuantity{get;set;}
        public List<bool> IsAddedIngredient{get;set;}
        public List<Ingredient> NewIngredients{get;set;}
        public List<double> NewIngredientsQuantity{get;set;}
        public List<Pantry> PantryItems{get;set;}
    }
}

家庭控制器:

[HttpGet("ingredients/new")]
        public IActionResult NewIngredients(string searching){
            AddIngredientsView viewModel = new AddIngredientsView();
            viewModel.Merchant = context.Merchants.FirstOrDefault(m => m.id == merchantId);
            viewModel.AllIngredients = context.Ingredients.ToList();

            return View("newIngredients", viewModel.AllIngredients.Where(x => x.Name.Contains(searching) || searching == null).ToList());
        }

最初的预期结果是所有成分的列表。当用户在 @Html.TextBox("searching") 中搜索成分时,它会过滤所有与其请求不匹配的项目。

我有十种成分在数据库中,当我在视图页面中省略 @using (Html.BeginForm....){} 之间的代码时,它们被正确调用,并简单地返回 View("newIngredients")家庭控制器。

代码在以书面形式提交时编译,但不会在浏览器中呈现。呈现页面时收到以下错误:

处理请求时发生未处理的异常。 ArgumentNullException:值不能为空。 参数名称:值

string.IndexOf(string value, int startIndex, int count, StringComparison comparisonType) ArgumentNullException:值不能为空。参数名称:值

string.IndexOf(string value, int startIndex, int count, StringComparison comparisonType)
string.Contains(string value)
ThisProject.Controllers.HomeController+<>c__DisplayClass7_0.<NewIngredients>b__1(Ingredient x) in HomeController.cs

            return View("newIngredients", viewModel.AllIngredients.Where(x => x.Name.Contains(searching) || searching == null).ToList());

System.Linq.Enumerable+WhereListIterator.ToList() System.Linq.Enumerable.ToList(IEnumerable 源) HomeController.cs中的ThisProject.Controllers.HomeController.NewIngredients(字符串搜索)

            return View("newIngredients", viewModel.AllIngredients.Where(x => x.Name.Contains(searching) || searching == null).ToList());

【问题讨论】:

    标签: asp.net-mvc html.beginform


    【解决方案1】:

    我解决了这个问题,我错误地传入了 viewModel。

    将最后两行更改为以下内容时,Conroller 起作用:

    [HttpGet("ingredients/new")]
            public IActionResult NewIngredients(string searching){
                AddIngredientsView viewModel = new AddIngredientsView();
                viewModel.Merchant = context.Merchants.FirstOrDefault(m => m.id == merchantId);
                viewModel.AllIngredients = context.Ingredients.Where(x => x.Name.Contains(searching) || searching==null).ToList();
    
                return View("newIngredients", viewModel);
            }
    

    谢谢。

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 1970-01-01
      • 2012-05-11
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      相关资源
      最近更新 更多