gpt4 book ai didi

c# - MVC 4 ViewModel 没有被发送回 Controller

转载 作者:IT王子 更新时间:2023-10-29 04:13:29 26 4
gpt4 key购买 nike

我似乎无法弄清楚如何将整个 ViewModel 发送回 Controller 以执行“验证并保存”功能。

这是我的 Controller :

[HttpPost]
public ActionResult Send(BitcoinTransactionViewModel transaction)
{
}

这是 View 中的表单:

<li class="check">
<h3>Transaction Id</h3>
<p>@Html.DisplayFor(m => m.Transaction.TransactionId)</p>
</li>
<li class="money">
<h3>Deposited Amount</h3>
<p>@Model.Transaction.Amount.ToString() BTC</p>
</li>
<li class="time">
<h3>Time</h3>
<p>@Model.Transaction.Time.ToString()</p>
</li>


@using (Html.BeginForm("Send", "DepositDetails", FormMethod.Post, new { transaction = Model }))
{

@Html.HiddenFor(m => m.Token);
@Html.HiddenFor(m => m.Transaction.TransactionId);

@Html.TextBoxFor(m => m.WalletAddress, new { placeholder = "Wallet Address", maxlength = "34" })
<input type="submit" value="Send" />

@Html.ValidationMessage("walletAddress", new { @class = "validation" })
}

当我点击提交时,conroller 包含 walletAddress 字段的正确值但是 transaction.Transaction.Time, transaction.Transaction.Location, transaction .Transaction.TransactionId 为空。

有没有办法将整个模型传回 Controller ?

编辑:

当我什至没有在 Controller 中收到 walletAddress 时。一切都归零!当我单独删除这一行时:@Html.HiddenFor(m => m.Transaction.TransactionId);它工作正常,我在 Controller 上获得了 Token 属性,但是当我将它添加回去时, Controller 上 transaction 对象的所有属性都是 NULL。

这是 BitcoinTransactionViewModel:

public class BitcoinTransactionViewModel
{
public string Token { get; set; }
public string WalletAddress { get; set; }
public BitcoinTransaction Transaction { get; set; }
}

public class BitcoinTransaction
{
public int Id { get; set; }
public BitcoinTransactionStatusTypes Status { get; set; }
public int TransactionId { get; set; }
public decimal Amount { get; set; }
public DateTime Time { get; set; }
public string Location { get; set; }
}

有什么想法吗?

编辑:我想通了,它在下面标记的答案中......

最佳答案

好吧,我一直在做其他事情并且再次遇到同样的问题。只有这一次我想出了如何让它发挥作用!

以下是所有可能感兴趣的人的答案:

显然,有一个命名约定。注意:

这行不通:

// Controller
[HttpPost]
public ActionResult Send(BitcoinTransactionViewModel transaction)
{
}

// View
@using (Html.BeginForm("Send", "DepositDetails", FormMethod.Post, new { transaction = Model }))
{

@Html.HiddenFor(m => m.Token);
@Html.HiddenFor(m => m.Transaction.TransactionId);
.
.

这个有效:

// Controller
[HttpPost]
public ActionResult Send(BitcoinTransactionViewModel **RedeemTransaction**)
{
}

// View
@using (Html.BeginForm("Send", "DepositDetails", FormMethod.Post, new { **RedeemTransaction** = Model }))
{

@Html.HiddenFor(m => m.Token);
@Html.HiddenFor(m => m.Transaction.TransactionId);
.
.

换句话说——命名约定错误! Model.Transaction 属性和我的 transaction 表单字段 + Controller 参数之间存在命名歧义。难以置信。

如果您遇到同样的问题,请确保您的 Controller 参数名称是唯一的 - 尝试将其重命名为 MyTestParameter 或类似的名称...

此外,如果您想将表单值发送到 Controller ,则需要将它们作为隐藏字段包含在内,这样就可以了。

关于c# - MVC 4 ViewModel 没有被发送回 Controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18299669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com