首页 > 解决方案 > ViewModel 在 Post 操作中始终为空 [HttpPost]

问题描述

我向 Web 服务发送请求,得到的响应是名称和值的列表。我在视图中循环它们并呈现一个表单,以允许用户填写字段并提交它。但是视图模型总是在后期操作中返回 null。

这是我的观点:

<form method="post">
    <div class="row register-form">
        @foreach (var item in Model.FlowOutputModel)
        {
            <div class="col-md-6">
                <div class="form-group">
                    <label for="@item.CharacteristicValue">
                        @item.CharacteristicName: 
                    </label>
                    <input asp-for="@item.CharacteristicValue" type="text" 
                            class="form-control" 
                            placeholder="@item.CharacteristicName *" value="" required/>
                </div>
            </div>
        }
    
        <div class="col-md-12">
            <input type="submit" class="btnRegister" value="Submit"/>
        </div>
    </div>
</form>

我的模型如下:

public class DecisionInputModel
{
    public string FlowName { get; set; }
    public List<FlowOutputModel> FlowOutputModel { get; set; }
}
public class FlowOutputModel
{
    public string CharacteristicName { get; set; }

    public string CharacteristicValue { get; set; }
}

我的控制器

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Index(DecisionInputModel decisionInput)
{
    if (ModelState.IsValid)
    {
        _service.GetResults(decisionInput);
    }
}

有什么建议么?

标签: c#.netasp.net-mvc.net-coresoap

解决方案


用 for 替换循环 foreach 并向表单添加操作

<form method="post" action="@Url.Action("Index", "Home")">

  <input  asp-for="@Model.FlowName"  type="text" class="form-control" />
 // or maybe  even better
@Html.TextBoxFor(model => model.FlowName, new {  @class = "form-control" })

 <div class="row register-form">
@for(int i=0; i < Model.FlowOutputModel.Count; i++)
    {
            
                <div class="col-md-6">
                    <div class="form-group">
                        <label for="@Model.FlowOutputModel[i].CharacteristicValue">
                            @Model.FlowOutputModel[i].CharacteristicName: 
                        </label>
                        <input asp-for="@Model.FlowOutputModel[i].CharacteristicValue" type="text" 
                               class="form-control" 
                               placeholder="@Model.FlowOutputModel[i].CharacteristicName *" value="" required/>
                    </div>
                </div>
            }
         <div class="col-md-12">
                <input type="submit" class="btnRegister" value="Submit"/>
            </div>
        </div>
    </form>
    

推荐阅读