我需要从名为Header
的类中获取特定变量。我有所有这些类的List<Header>
,我现在这样做:
protected string _HrefsJson = string.Empty;
protected string _OnClicksJson = string.Empty;
protected string _TargetsJson = string.Empty;
protected string _TitlesJson = string.Empty;
protected string _CaptionsJson = string.Empty;
List<Header> _HomeHeaderList = _Home.HeaderList.FindAll(u => !string.IsNullOrEmpty(u.MobileImage));
IEnumerable<string> _Titles = _HomeHeaderList.Select(u => u.Title).ToList();
IEnumerable<string> _Captions = _HomeHeaderList.Select(u => u.Caption).ToList();
IEnumerable<string> _Targets = _HomeHeaderList.Select(u => u.LinkTarget).ToList();
IEnumerable<string> _OnClicks = _HomeHeaderList.Select(u => u.LinkOnClick).ToList();
IEnumerable<string> _Hrefs = _HomeHeaderList.Select(u => u.Link).ToList();
JavaScriptSerializer jss = new JavaScriptSerializer();
_TitlesJson = jss.Serialize(_Titles);
_CaptionsJson = jss.Serialize(_Captions);
_HrefsJson = jss.Serialize(_Hrefs);
_TargetsJson = jss.Serialize(_Targets);
_OnClicksJson = jss.Serialize(_OnClicks);
在我的.ascx文件中,我在<script>
标记内得到这样的字符串:
var titles = <%=_TitlesJson %>,
captions = <%= _CaptionsJson %>,
hrefs = <%= _HrefsJson %>,
targets = <%= _TargetsJson %>,
onclicks = <%= _OnClicksJson %>;
事情是,我需要序列化这些值作为JSON Arrays传递给javascript,但我觉得我正在创建许多字符串,并且在List上做了太多Select Statements
。有没有办法简化性能和更短的代码?也许一线或接近它?我需要维护索引关联,即0到(_HomeHeaderList.Count - 1)
,所以这是我能想到的唯一方法。但这对我来说似乎很草率。
我需要维护每个索引的原因是因为,在Javascript中我使用每个索引的这些值将它们写为文本。
由于
需要将Json Arrays中的值输入到此Html结构中:
<div class="mobile-text-wrapper" data-target="#mobileCarousel" role="overlay">
<div class="pnova-bold mobile-title"></div>
<div class="tisa-italic mobile-caption"></div>
</div>
<a class="mobile-overlay-link"></a>
我正在使用的jQuery是这样的:
<script>
var titles = <%=_TitlesJson %>,
captions = <%= _CaptionsJson %>,
hrefs = <%= _HrefsJson %>,
targets = <%= _TargetsJson %>,
onclicks = <%= _OnClicksJson %>,
slideIndex = 0;
jQuery(document).ready(function($) {
$(".mobile-title").text(titles[slideIndex]);
$(".mobile-caption").text(captions[slideIndex]);
$(".mobile-overlay-link").attr("href", hrefs[slideIndex]);
if (targets[slideIndex] != "")
$(".mobile-overlay-link").attr("target", targets[slideIndex]);
if (onclicks[slideIndex] != "")
$(".mobile-overlay-link").attr("onclick", onclicks[slideIndex]);
// On Slide Before
$('#mobileCarousel').bind('slide.bs.carousel', function (e) {
$(".mobile-text-wrapper").fadeOut("fast");
});
// On Slide After
$('#mobileCarousel').on('slid.bs.carousel', function (e) {
slideIndex = $('#mobileCarousel .active').index('#mobileCarousel .item');
$(".mobile-title").text(titles[slideIndex]);
$(".mobile-caption").text(captions[slideIndex]);
$(".mobile-overlay-link").attr("href", hrefs[slideIndex]);
if (targets[slideIndex] != "")
$(".mobile-overlay-link").attr("target", targets[slideIndex]);
if (onclicks[slideIndex] != "")
$(".mobile-overlay-link").attr("onclick", onclicks[slideIndex]);
$(".mobile-text-wrapper").fadeIn("slow");
});
});
</script>
答案 0 :(得分:2)
为什么不将您正在获取的列表序列化,然后访问其中的每个字段?
import java.awt.
public Yourclass{
JPanel Container;
GridBagLayout yourlayout;
GridBagConstraints gbc;
//Initialize them in the constructor.. Ex: Container = new JPanel();
}
private void addobjects(Component object, int gridx, int gridy, int width, int heigth){
gbc.gridx = gridx;
gbc.gridy = gridy;
gbc.gridwith = width;
gbc.gridheight = height;
yourlayout.setConstraints(object, gbc);
Container.add(object);
}
然后在.ascx文件中,您应该能够:
addobjects(YourJLabel, 0, 0, 1, 1);
addobjects(YourTextField, 1, 0, 1, 1);
显然,您需要在ascx文件中添加一个循环来依次获取每个项目,但这种方法可以将所有数据保存在一起。
编辑:
要更新您的javascript,您应该只需使用_HomeHeaderJson上的slideIndex,然后获取每个字段。
例如
JavaScriptSerializer jss = new JavaScriptSerializer();
_HomeHeaderJson = jss.Serialize(_HomeHeaderList);