访问其他模型的UI元素

本文关键字:UI 元素 模型 其他 访问 | 更新日期: 2023-09-27 18:08:56

. NET MVC 4 Web应用程序我有两个模型:

    具有属性Block LinkedBlock
  1. Block
  2. BlockCollection,包含多个Block。保证Block.LinkedBlock中的每个Block实例也在BlockCollection中。

现在,我要做的是:
如果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。

我怎么得到它?

访问其他模型的UI元素

当你渲染链接块时,只需添加任何你想要的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。

有帮助吗?