如果在MVC Core 3.1中使用asp-for属性,则在POST之后未设置该值

时间:2020-10-09 11:18:10

标签: c# asp.net-core-mvc

我有简单的视图模型:

public class GogViewModel
{
  [Required]
  public string Name { get; set; }

  public bool IsBeta { get; set; }

  public string Result { get; set; }
}

和控制器:

[HttpGet]
public IActionResult Index()
{
  return View(new GogViewModel());
}

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Index(GogViewModel model)
{
  if (ModelState.IsValid)
  {
    model.Result = DoSomething();
  }

  return View(model);
}

并查看:

@model GogViewModel
<div>
  <form method="post">
    @Html.AntiForgeryToken()

    <div class="form-group row">
      <label class="col-sm-2 col-form-label" asp-for="Name">Release name</label>
      <div class="col-sm-10">
        <input type="text" class="form-control" asp-for="Name" placeholder="paste release name here" />
      </div>
    </div>
    <div class="form-group row">
      <label class="col-sm-2 col-form-label" asp-for="Result">Result</label>
      <div class="col-sm-9">
        <input type="text" class="form-control-plaintext" readonly="readonly" asp-for="Result" />
         <p>@Model.Result</p> <!-- it works here means the value is printed -->
      </div>
      <div class="col-sm-1">
        <button type="button" class="btn btn-outline-info copy float-right" data-target="Result"><i class="far fa-copy"></i></button>
      </div>
      <div class="clearfix"></div>
    </div>
    <input type="submit" class="btn btn-success" value="Fix it" />
  </form>
</div>

以某种方式在POST请求后不输出结果。

为什么?我的错误在哪里?

2 个答案:

答案 0 :(得分:0)

它将以以下方式工作:

  1. 将私有设置器设置为Result属性=> public string Result {get; private set;}
  2. 添加为结果设置值的方法:internal void SetResult(string result) { Result = result; }
  3. 在控制器中,像这样SetResult来呼叫model.SetResult(...);

,并且将在只读输入中显示。我不知道它为什么起作用,我也不知道为什么将其输入时会清除该值。

我使用具有readonly属性的输入,以便使用javascript复制输出值。

答案 1 :(得分:0)

也许您需要在输入标记中添加诸如value =“ @ Model.Result”之类的内容?