Waq*_*med 3 c# linq asp.net-mvc jquery asp.net-mvc-4
我正在尝试制作一个网上银行网站(用于学习 ASP.NET MVC)。我有一个类帐户
class Account
{
int account_id;
String account_number;
decimal balance;
}
Run Code Online (Sandbox Code Playgroud)
我有一个交易模型。
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; }
}
Run Code Online (Sandbox Code Playgroud)
然后在控制器中,我将帐户放在 ViewBag 中。
ViewBag.account_from = new SelectList(db.Accounts, "account_id", "account_number");
Run Code Online (Sandbox Code Playgroud)
在视图中,我创建了一个用于显示所有帐户的下拉列表
@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
" })
Run Code Online (Sandbox Code Playgroud)
现在,我试图表现出平衡的选择的帐户在EditorFor
@Html.EditorFor(model => model.OrignalBalance, new { htmlAttributes = new { @id="OrignalBalance", @class = "form-control", disabled = "disabled", @readonly = "readonly" } })
Run Code Online (Sandbox Code Playgroud)
我在ViewBag 中拥有所有帐户,并且在下拉列表中显示该帐户编号(这些帐户中也有余额)。我试图在DropDownFor值更改时更改EditorFor 的值,但仍然无法做到这一点。我尝试使用 jquery 做到这一点,但我不知道我可以在其中使用LINQjquery 中
我的 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>
Run Code Online (Sandbox Code Playgroud)
如果我找到一个好的解决方案来做到这一点会很好,这样我就可以在更改事件时更新 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");
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
假设您有一个操作方法来返回余额
[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"});
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想使用操作方法和 ajax 方式,您可以做的是,创建一个包含您的帐号和余额的字典,并将其作为视图模型的一部分传递,并在您的剃刀视图中将其设置为js 对象,在 change 事件中,您可以查询 js 字典以获取值。
此外,我建议不要使用 ViewBag 在您的操作方法和您的视图之间传输数据以呈现下拉列表。您应该添加一个强类型属性来处理它。
因此,让我们为您的视图模型添加一些新属性。
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; }
}
Run Code Online (Sandbox Code Playgroud)
并在您的 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);
}
Run Code Online (Sandbox Code Playgroud)
在您的 razor 视图中,序列化此属性并设置为 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>
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1848 次 |
| 最近记录: |