Я отправляю запрос в веб-службу, и в ответ я получаю список имен и значений. Я зацикливаю их в представлении и визуализирую форму, чтобы пользователи могли заполнить поля и отправить их. Но модель просмотра всегда возвращает 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);
    }
}

Какие-либо предложения?

1
Ah Sa Fa 25 Май 2021 в 11:49

2 ответа

Лучший ответ

Заменить цикл foreach на for и добавить действие в форму

<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>
    
3
Serge 25 Май 2021 в 11:42

Вы должны добавить к входным данным атрибут «name»:

  <input name="FlowOutputModel[@Model.FlowOutputModel.IndexOf(item)].CharacteristicValue" type="text" class="form-control" placeholder="@item.CharacteristicName *" value="" required />
0
Juan Portillo 25 Май 2021 в 10:08