我有一个这样的嵌套列表:
我希望能够选择一个,一个或多个字符串,一个,一个或多个图片ID,然后将其作为表单输入提交。
我已经尝试过的:
输入字段+按钮
<input type="hidden" name="strings" value="StringsInChapter"><br>
<button type="submit" value="Submit">Add</button>
但是使用该选项时,如果有很多特征,则有数十个“添加”按钮,并且视图只是被它们淹没了,看起来简直糟透了。
选择+选项
<select name="CharacteristicsIntro" multiple>
<option value="string1">"Once upon a time"</option>
<option value="string2">"Welcome"</option>
<option value="pictureId1">1</option>
<option value="pictureId6">6</option>
</select>
使用该选项,将出现一个框:
这看起来不太好,并且视图再次充满了这些框。此外,在这种情况下滚动非常不舒服。我希望所有内容都显示在视图上。
我的目标有点接近第二个选项,但没有带滚动按钮的环绕框。我要实现的是,用户只能看到我的嵌套列表,没有按钮。用户选择多行,并且每项选择信息都保存在HttpContext.Session
中。然后,用户可以转到购物车之类的地方,所有选择都显示在表格中,单击“提交”按钮,然后通过邮寄将信息发送到服务器。我怀疑没有JS就无法做到这一点,但是可能仍然存在以简单方式实现的任何障碍吗?
以下图片大致代表了所需的输出:
因此,每个饼图都有名称,价格,长,简短说明和星期几标记。用户可以选择饼图的几个特征或不选择特征,这些特征会在用户点击时改变颜色(其他行为情况也是可能的,这只是一个示例),并添加到了会话上下文中。如果用户再次点击,则颜色恢复为正常,并且该项目从会话上下文中删除。这个想法与正常的购物车行为非常接近,但是没有使用复选框或按钮。
谢谢!
答案 0 :(得分:1)
我不确定使用简单的HTML会很容易做到这一点。绝对需要一些JS工作。但是,如果您使用某种C#语言来执行此操作。在razor(.cshtml)中有@ Html.ListBoxFor(m => m.SelectedTags, new MultiSelectList(Model.Tags,“ TagID”,“ Tag”),null)。否则,这将对您有所帮助,这也是一个JS插件,用于获取数据并将其发送到servere。 https://select2.org/searching (尝试多选示例。)
答案 1 :(得分:0)
我提出了一个简单的解决方案。它看起来不太好,有时会出现一些问题,但是它可以工作……可能有人会发现它有用
function changeColor(elemId) {
var x = document.getElementById(elemId);
if (x.style.background == "") {
x.style.background = "rgb(58, 58, 58)";
window.sessionStorage.setItem(elemId, "rgb(58, 58, 58)");
} else if (x.style.background == "rgb(28, 28, 28)") {
x.style.background = "rgb(58, 58, 58)";
window.sessionStorage.setItem(elemId, "rgb(58, 58, 58)");
} else if (x.style.background == "rgb(58, 58, 58)") {
x.style.background = "rgb(28, 28, 28)";
window.sessionStorage.removeItem(elemId);
}
return false;
}
function setColors() {
var elem;
for (var i = 0; i < sessionStorage.length; i++) {
elem = document.getElementById(window.sessionStorage.key(i));
elem.style.background = window.sessionStorage.getItem(sessionStorage.key(i));
}
return false;
}
在要更改颜色的元素(例如<a href="#" onclick="changeColor(this.id)>
)的html标记中,这样调用第一个函数。在_Layout.cshtml中,我向set()
添加了对正文的调用:<body onload="set()">