【问题标题】:Form submit gets null model表单提交获取空模型
【发布时间】:2019-05-02 01:01:54
【问题描述】:

当我提交表单时,控制器方法获取空模式。我有一个 Details 视图,它从不同的控制器调用 CreateNewProduct 方法来单击按钮。 CreateNewProduct 调用 SharedProduct 视图或重定向到 Details 视图的操作方法。我在 SharedProduct 视图中有一个提交按钮,当表单被提交时,它的模型为空。我可以在这里找个助理吗?谢谢!

详细视图

    @model DetailsModel

    @foreach (var productTemplate in Model.Products)
     {

       @Html.ActionLink("Add New Product", "CreateNewProduct", "NewProductTemplate", new { productTemplate.productId, productTemplate.customerId}, new { @class = "btn btn-sm btn-primary" })

        @Html.ActionLink("Remove Product", "Delete", "ProductTemplate", new { productTemplate.productId}, new { @class = "btn btn-sm btn-primary" })

     }

产品模板控制器

public ActionResult Details()
        {
            var productTemplate = _productTemplateService.GetAllProducts(User);
            return View(new DetailsModel
            {
            ProductTemplate = productTemplate,
            });
        }
public ActionResult Delete(Guid productId)
        {
            var productTemplate = _productTemplateService.Delete(productId , User);
            return View("Details",new DetailsModel
            {
            ProductTemplate = productTemplate,
            });
        }

模型 SharedModel 和 DetailsModel

    public class SharedModel
        {
            public IEnumerable<SharedProductTemplateListItemDto> SharedProducts    {get; set; }

        }
public class DetailsModel
        {
            public IEnumerable<ProductTemplateListItemDto> Products{get; set; }

        }

NewProductTemplate 控制器代码

public ActionResult CreateNewProduct(Guid productId, Guid customerId)
    {
        var sharedProduct =     _newProductTemplateService.GetSharedProductCustomer(productId);
        var _finalSharedProducts = (sharedProduct.Any(t => t.productId != productId));

        if (_finalSharedProducts)
        {
            var sharedProdctTemplate =     _newProductTemplateService.GetSharedProduct(productId);
            return View("SharedProduct", new SharedModel
            {
                SharedProducts = sharedProdctTemplate
            });
            }
           else
           {
                _productTemplateService.CreateNewProductOne(productId);
                return RedirectToAction("Details", "ProductTemplate");
        }
    }

public ActionResult ShareProduct (SharedModel shareModel)
    {
       //Access ShareProducts from shareModel 
        return RedirectToAction("Details", "ProductTemplate");
    }

查看 - SharedProduct.view

    @model SharedModel
    @using (Html.BeginForm("ShareProduct", "NewProductTemplate",        FormMethod.Post))
{
            @Html.AntiForgeryToken()
   <div class="flex-row">
    <div class="col-6">
        <div class="d-flex flex-row">
            <div class="p-2">Product ID</div>
            <div class="p-2">Product Types</div>
            <div class="p-2">Status</div>
        </div>

            @for (var i = 0; i < Model.SharedProducts.Count(); i++)
            {
                @Html.HiddenFor(model => model.SharedProducts.ElementAt(i).ProductId)
                @Html.HiddenFor(model => model.SharedProducts.ElementAt(i).CustomerId)
                @Html.HiddenFor(model => model.SharedProducts.ElementAt(i).ProductType)
                @Html.HiddenFor(model => model.SharedProducts.ElementAt(i).StatusCode)
                @Html.HiddenFor(model => model.SharedProducts.ElementAt(i).IsShared)
            <div class="d-flex flex-row">
                <div class="p-2">@Html.DisplayFor(model =>   model.SharedProducts.ElementAt(i).ProductId)</div>
                   <div class="p-2">@Html.DisplayFor(model => model.SharedProducts.ElementAt(i).ProductType)</div>
                    <div class="p-2">@Html.DisplayFor(model => model.SharedProducts.ElementAt(i).StatusCode)</div>
                  @if (Model.SharedProducts.ElementAt(i).StatusCode == VersionStatus.PUBLISHED)
                {
                    <div class="p-2">@Html.EditorFor(m => m.SharedProducts.ElementAt(i).IsShared)</div>
                }
            </div>
        }
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-sm btn-primary" />
        </div>
    </div>
</div>

【问题讨论】:

    标签: c# asp.net model-view-controller bootstrap-4


    【解决方案1】:

    我很确定问题出在您引用集合项的方式上:

    .ElementAt(i)
    

    不如试试

    @Html.HiddenFor(model => model.SharedProducts[i].ProductId)
    

    【讨论】:

    • 不敢相信这会在一件小事上花费数小时后发挥作用!谢谢!这解决了我在这篇文章中的问题 1:stackoverflow.com/questions/55923022/… 你可以看看我在那篇文章中的第二个问题吗?感谢您的所有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2017-10-10
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多