使用 POST 传递 two/multiple 变量的正确方法?

Correct way to pass in two/multiple variables with POST?

怎么了。

我有一个使用新 asp-... 语法的表单:

<form asp-controller="Test" asp-action="Edit" method="post" class="form-horizontal" role="form">
   <div class="form-horizontal">
      <div asp-validation-summary="ValidationSummary.All" class="text-danger"></div>
        ...
   </div>
</form>

其中 post 支持自定义 class:

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Edit(CustomClass object)
{
   ...
}

不过,我想让它post返回两个不同的对象。有没有 new/correct 方法可以使用 Core 和 asp-... 语法来做到这一点?

如果没有,最好的方法是什么?

如果我没理解错的话,这应该对你有用。

您的 ViewModel 包含 类:

public class TestViewModel
{
    public Object1 Test1 { get; set; }
    public Object2 Test2 { get; set; }

    public TestViewModel()
    {

    }

    public TestViewModel(Object1 one, Object2 two)
    {
        Test1 = one;
        Test2 = two;
    }
}

public class Object1
{
    public string TestString1 { get; set; }
}

public class Object2
{
    public string TestString2 { get; set; }
}

观点:

@model TestViewModel

<form asp-controller="Admin" asp-action="Test" method="post" role="form">
    <label asp-for="@Model.Test1.TestString1"></label>
    <input asp-for="@Model.Test1.TestString1" />

    <label asp-for="@Model.Test2.TestString2"></label>
    <input asp-for="@Model.Test2.TestString2" />

    <button type="submit">submit</button>
</form>

最后是控制器动作:

  public IActionResult Test()
    {
        Object1 obj1 = new Object1() { TestString1 = "test1" };
        Object2 obj2 = new Object2() { TestString2 = "test2" };
        TestViewModel vm = new TestViewModel(obj1, obj2);

        return View(vm);
    }

    [HttpPost]
    public IActionResult Test(TestViewModel vm)
    {
        _logger.LogDebug(vm.Test1.TestString1);
        _logger.LogDebug(vm.Test2.TestString2);

        return View(vm);
    }