在我的ASP.NET MVC 4 Web应用程序中,我有两个模型:
Block
,其属性为Block LinkedBlock
。 BlockCollection
,其中包含多个Block
。 Block
中的每个Block.LinkedBlock
实例都保证也在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。
我如何得到它?
答案 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。
这有帮助吗?