【问题标题】:Correct way to pass in two/multiple variables with POST?使用 POST 传递两个/多个变量的正确方法?
【发布时间】:2016-04-25 16:38:34
【问题描述】:

怎么了。

我有一个新的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-... 语法来做到这一点?

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

【问题讨论】:

  • 据我所知,您只能拥有一个对象。在我看来,您似乎是在视图中直接使用模型,而您不应该这样做。您应该为某个操作创建一个 ViewModel 并在此视图模型中传递您需要的所有内容,并在操作中处理它
  • @Tseng 我确实有一个带有两个构造函数(带参数)的 ViewModel,其中包含“CustomClass object1”和“OtherClass object2”。但是,当我尝试传回 ViewModel 时,会遇到“无参数实例”错误。因此,我在 VM 中创建了另一个无参数的构造函数,但 object1 和 object2 返回为空。我不确定我错过了什么。

标签: c# asp.net-core http-post


【解决方案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; }
}

观点:

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

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多