访问其他模型的UI元素

时间:2013-04-11 19:09:19

标签: c# asp.net-mvc

在我的ASP.NET MVC 4 Web应用程序中,我有两个模型:

  1. Block,其属性为Block LinkedBlock
  2. BlockCollection,其中包含多个BlockBlock中的每个Block.LinkedBlock实例都保证也在BlockCollection中。
  3. 现在,我想做的是以下几点:
    如果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。

    我如何得到它?

2 个答案:

答案 0 :(得分:1)

在渲染链接块时,只需将您想要的任何ID添加到HTML帮助程序中,例如:

@Html.TextBoxFor(m => m.Text, new { id = blockId });

其中blockId是您的唯一ID,例如ID记录在数据库中。稍后,您可以在构建onChange处理程序调用时引用此ID。类似的东西:

var onChange = string.Format("setText({0}, this.text);", Model.LinkedBlock.ID);

如果您提供更多上下文,我可以为您提供更多示例代码。

答案 1 :(得分:1)

在块模型中,您应该具有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 });
}

你显然必须确保所有的链接块都在页面上,并带有各自的ID。

这有帮助吗?