【问题标题】:Passing model from get method to a post nulls the model将模型从 get 方法传递到 post 会使模型为空
【发布时间】:2022-12-09 18:01:18
【问题描述】:

当我将模型传递给 post 方法的视图时,ProductId 和 UserId 被清空。

        [HttpGet]
        public async Task<IActionResult> AddReview(int id)
        {
            var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

            var model = new AddReviewViewModel()
            {
                ProductId = id,
                UserId = userId
            };

            return View(model);
        }

        [HttpPost]
        public async Task<IActionResult> AddReview(AddReviewViewModel addReviewViewModel)
        {
            if (!ModelState.IsValid)
            {
                return View(addReviewViewModel);
            }
            //...
        }

这是我调用 post 方法的方式。


<div class="row">
    <div class="col-sm-12 offset-lg-2 col-lg-8 offset-xl-3 col-xl-6">
        <form asp-action="AddReview" method="post">
            <div class="mb-3">
                <label asp-for="@Model.Comment" class="form-label">Comment</label>
                <input asp-for="@Model.Comment" class="form-control" aria-required="true" />
                <span asp-validation-for="Comment" class="text-danger"></span>
            </div>
            <div class="mb-3">
                <label asp-for="@Model.Rating" class="form-label">Comment</label>
                <input asp-for="@Model.Rating" class="form-control" aria-required="true" />
                <span asp-validation-for="Rating" class="text-danger"></span>
            </div>
            <div class="mb-3">
                <input class="btn btn-primary" type="submit" value="Submit Review" />
            </div>
        </form>
    </div>
</div>

我在添加新产品时做过类似的事情,但我没有遇到任何问题。

【问题讨论】:

  • “如果模型状态不是有效 ..." - 不确定,但是否会因为“无效”状态而被重置?
  • 你能告诉我们你调用那个 post 方法的代码吗?
  • SubKey={UserId}, Key="UserId", ValidationState=Invalid 无效状态
  • @Silvermind 好了,我已经通过添加代码编辑了帖子。

标签: c# asp.net


【解决方案1】:

听起来 ProductId 和 UserId 属性在通过 POST 请求调用时在 AddReview 方法中被清空。发生这种情况可能有以下几个原因:

  1. ProductId 和 UserId 属性未包含在 POST 请求中。在这种情况下,您需要将它们包含在提交给 POST 方法的表单中,作为隐藏字段或作为用户可以填写的附加表单字段。
  2. ProductId 和 UserId 属性正在被默认模型绑定覆盖。在这种情况下,您可以尝试在 POST 方法中的 addReviewViewModel 参数上使用 [Bind] 属性来指定应从请求中绑定哪些属性。

    这将指示模型绑定器仅绑定请求中的 ProductId 和 UserId 属性,并保留任何其他属性不变。

    也可能存在其他一些问题导致 ProductId 和 UserId 属性在 POST 方法中为空。如果没有关于您的代码和正在发送的请求的更多信息,则很难提供更具体的答案。我希望这有帮助!

    例子:

    [HttpPost]
    public async Task<IActionResult> AddReview([Bind("ProductId", "UserId")] AddReviewViewModel addReviewViewModel)
    {
        if (!ModelState.IsValid)
        {
            return View(addReviewViewModel);
        }
        //...
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多