我正在开展一个项目,要求我实现以下目标:
例如,如果我选择不同的基金,那么该基金的基金代码将显示在文本框中。
这是我局部视图中的相关代码。我在这里要做的是从模型中获取值(如果存在)或从查询中获取默认值。
protected void Page_Load(object sender, EventArgs e)
{
var qry = (from id in _db.myTable
select new
{
id.Code,
}).FirstOrDefault();
_changedId = Model.Code ?? qry.Code;
}
<td><%: Html.DropDownListFor(fn1 => Model.Id, _val, new { @id = myId" } )%>
</td>
<td class="labels">
Value:
</td>
<td>
<%= Html.TextBoxFor(fc => Model.Value, new { @Value= _changedId, @readonly = true }) %>
</td>
注意:我知道这不是MVC的最佳做法,但这就是项目的编写方式。
以下是行动方法:
public ActionResult GetFundCode(MyModel fnc)
{
int fid = fnc.Id;
var qry = (from tab in _db.AnotherTable
where tab.Id == fid
select tab).FirstOrDefault();
fnc.newCode = qry.Code;
return PartialView("~/Views/TransactionCommonInputs/FromToFundSearchSelector.ascx",fnc);
}
我的动作方法“工作”,因为它在模型“fnc”中返回正确的值。我得到了新值并将其分配到上面发布的局部视图的页面加载部分中,并在此处再次指定:
_changedId = Model.fundCode ?? qryFundCode.FundCode;
运行VS2010调试器显示从控制器返回到部分视图的值是正确的。那是当我将鼠标悬停在'_changedValue'上时,会为其分配我想要的值:
<%= Html.TextBoxFor(fc => Model.Value, new { @Value= _changedId, @readonly = true }) %>
</td>
但是,运行代码时显示的值将恢复为之前的值。
我希望这比我的第一篇文章更容易理解。