使用POST传递两个/多个变量的正确方法?

时间:2016-04-25 16:38:34

标签: c# asp.net-core http-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>

回发自定义类:

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

但是,我想让它回发两个不同的对象。有没有一种新的/正确的方法来使用Core和asp-...语法?

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

1 个答案:

答案 0 :(得分:1)

如果我理解正确,这应该适合你。

您的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; }
}

观点:

&#13;
&#13;
@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>
&#13;
&#13;
&#13;

最后控制器动作:

  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);
    }