访问其他模型的UI元素
本文关键字:UI 元素 模型 其他 访问 | 更新日期: 2023-09-27 18:08:56
. NET MVC 4 Web应用程序我有两个模型:
- 具有属性
-
Block
。 -
BlockCollection
,包含多个Block
。保证Block.LinkedBlock
中的每个Block
实例也在BlockCollection
中。
Block LinkedBlock
的现在,我要做的是:
如果Block
有一个链接块,它应该得到一个onchange
处理程序,将链接块的文本设置为该块的文本。
原则上,这很简单:
if (Model.LinkedBlock != null)
{
var onChange = string.Format("setText({0}, this.text);", linkedBlockId);
@Html.TextBoxFor(m => m.Text, new { onchange = onChange });
}
<script type="text/javascript" language="javascript">
function setText(id, text) {
$("#" + id).val(text);
}
但问题是,我不知道如何获得链接块的正确HTML ID。
我怎么得到它?
当你渲染链接块时,只需添加任何你想要的HTML帮助器ID,如:
@Html.TextBoxFor(m => m.Text, new { id = blockId });
其中blockId
是您的唯一ID,说数据库中的ID记录。稍后,您可以在构造onChange
处理程序调用时引用此ID。比如:
var onChange = string.Format("setText({0}, this.text);", Model.LinkedBlock.ID);
如果你提供更多的上下文,我将能够给你更多的示例代码。
在Block Model中你应该有一个Id属性。然后在视图中你可以引用那个Id。例如:
class Block
{
public Block LinkedBlock { get; set; }
public int Id { get; set; }
}
视图必须是强类型的:
@model Models.Block
或以下,这取决于你在做什么:
@model Models.BlockCollection
然后将代码更改为(只需将引用添加到链接块中):
if (Model.LinkedBlock != null)
{
var onChange = string.Format("setText({0}, this.text);", Model.LinkedBlock.Id);
@Html.TextBoxFor(m => m.Text, new { onchange = onChange });
}
显然,你必须确保所有的linkedblock都在页面上,并具有各自的id。
有帮助吗?