gpt4 book ai didi

c# - 在 DropDownFor 值更改时更改 EditorFor 的值

转载 作者:行者123 更新时间:2023-11-30 14:08:38 24 4
gpt4 key购买 nike

我正在尝试制作一个在线银行网站(用于学习 ASP.NET MVC)。我有一个类Account

class Account
{
int account_id;
String account_number;
decimal balance;
}

我有一个交易模型。

 public class MakeTransactionModel
{
[Required]
public String AccountFrom { get; set; }
[Required]
public String AccountTo { get; set; }

public Decimal OrignalBalance { get; set; }
[Required]
public Decimal Amount { get; set; }
[Required]
public String TransactionFor { get; set; }
}

然后在 Controller 中,我将帐户放入 ViewBag。

ViewBag.account_from = new SelectList(db.Accounts, "account_id", "account_number");

在 View 中,我创建了一个用于显示所有帐户的下拉列表

@Html.DropDownListFor(u => u.AccountFrom, (SelectList)ViewBag.account_from, htmlAttributes: new { @class = "form-control", @id = "AccountFrom", onchange=@"
@Model.OrignalBalance = 1000; // I tried this but did not work
" })

现在,我正在尝试在 EditorFor 中显示 selected accountbalance

@Html.EditorFor(model => model.OrignalBalance, new { htmlAttributes = new { @id="OrignalBalance", @class = "form-control", disabled = "disabled", @readonly = "readonly" } })

我在 ViewBag 中有所有帐户,并且我在下拉列表中显示该帐户号(这些帐户也有余额)。我试图在 DropDownFor 值更改时更改 EditorFor 的值,但仍然无法做到这一点。我尝试使用 jquery 来做到这一点,但我不知道我能否在 jquery

中使用 LINQ

我的 jquery 代码是

 <script type="text/javascript">

$(document).ready(function () {
$(function () {
$('#AccountFrom').change(function () {
var selectedValue = $('#AccountFrom').text();
$('#OrignalBalance').val(@{new BankEntities().Accounts.SingleOrDefault(acc => acc.account_number == $('#AccountFrom').text())}); // I am trying to do this
});
});
}
)
</script>

如果我找到一个很好的解决方案来做到这一点,那就太好了,这样我就可以在更改事件上更新 EditorFor。

谢谢。

最佳答案

您应该进行ajax调用并传递帐号并从服务器获取金额。

$(function()
{
$('#AccountFrom').change(function() {
var accountId= $('#AccountFrom').val();
var url="@Url.Action("Balance","Account")";
$.post(url+"?accountNumber="+accountId,function(response){
if(response.Status==="success")
{
$("#OrignalBalance").val(response.Balance);
}
else
{
alert("Invalid Account");
}
});
});
});

假设您有一个返回余额的操作方法

[HttpPost]
public ActionResult Balance(string accountNumber)
{
//Of course you want to authorize the call
var db=new BankEntities();
var a= db.Accounts.FirstOrDefault(x=> x.account_number ==accountNumber);
if(a!=null)
{
return Json( new { Status="success", Balance=a.Balance });
}
else
{
return Json( new { Status="error"});
}
}

如果您不想制作操作方法和 ajax 方式,您可以做的是,创建一个包含您的帐号和余额的字典,并将其作为您的 View 模型的一部分传递给您的 razor View ,设置它是一个 js 对象,在更改事件中,您可以查询 js 字典以获取值。

此外,我建议不要使用 ViewBag 在您的操作方法和用于呈现下拉列表的 View 之间传输数据。您应该添加一个强类型属性来处理它。

因此,让我们向您的 View 模型添加一些新属性。

public class MakeTransactionModel
{
// Your other existing properties here

public Dictionary<string,decimal> AccountBalances { set; get; }

// These 2 properties are for rendering the dropdown.
public int FromAccountId { set; get; }
public List<SelectListItem> FromAccounts { set; get; }
}

然后在您的 GET 操作中,用帐号和相应的余额值填充此属性。

public ActionResult Transfer()
{
var vm = new MakeTransactionModel();
vm.AccountBalances = new Dictionary<string, decimal>();
// Hard coded for demo. You may read it from your db tables.
vm.AccountBalances.Add("CHECKING0001", 3450.50M);
vm.AccountBalances.Add("SAVINGS0001", 4450.50M);

//load the data for accounts.pls change to get from db
vm.FromAccounts = new List<SelectListItem>
{
new SelectListItem { Value="CHECKING0001", Text="Checking" },
new SelectListItem { Value="SAVINGS0001", Text="Saving" }
};

// to do : Load other properties also
return View(vm);
}

然后在您的 razor View 中,序列化此属性并设置为 js 对象。

@model MakeTransactionModel
@using(Html.BeginForm())
{
@Html.DropDownListFor(s=>s.FromAccountId,Model.FromAccounts,"Select")

@Html.EditorFor(model => model.OrignalBalance,
new { @id="OrignalBalance", @class = "form-control",
disabled = "disabled", @readonly = "readonly" } )
<input type="submit" />
}
@section Scripts
{
<script>
var balanceDict = @Html.Raw(Newtonsoft.Json.JsonConvert
.SerializeObject(Model.AccountBalances));

$(function () {

$('#FromAccountId').change(function() {
var accountId= $('#AccountFrom').val();
var v = balanceDict[accountId];
$("#OrignalBalance").val(v);
});

});
</script>
}

关于c# - 在 DropDownFor 值更改时更改 EditorFor 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502189/

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