使用 C# 和 JSON 填充 ASP.Net 中的下拉列表和文本框



这是我关于堆栈溢出的第一个问题,所以提前感谢您提供的任何帮助/建议。

我目前正在仅使用 ASP.Net 和 C# 制作"库数据库"。这是一项大学作业,我们仅限于此,必须使用 JSON 保存和提取数据。

虽然我已经能够添加书籍列表并在网格视图中显示列表,但我需要能够使用标准表单显示和编辑信息,使用下拉列表和文本框来显示每个部分。 下面的代码片段显示了用于保留 JSON 文件的所有变量的 Book 类

public class Book
{
public string id { get; set; }
public string title { get; set; }
public string author { get; set; }
public string year { get; set; }
public string publisher { get; set; }
public string isbn { get; set; }
public Book(string id, string title, string author, string year, string publisher, string isbn)
{
this.id = id;
this.title = title;
this.author = author;
this.year = year;
this.publisher = publisher;
this.isbn = isbn;       
}
}

下面的代码显示了用于从上述变量生成列表的 Other 类。

public class BookList
{
public List<Book> bookList { get; set; }
public BookList()
{
bookList = new List<Book>();
}
}

下面的代码显示了我目前对编辑书籍页面的内容。

public partial class EditBook : System.Web.UI.Page
{
public const string FILENAME = @"C:UsersUserDocumentsAssessments19383038_CSE2ICX_Assignment3JsonFilesBookList.Json";
string jsonText = " ";
BookList bookList = new BookList();  
protected void Page_Load(object sender, EventArgs e)
{
try
{
jsonText = File.ReadAllText(FILENAME);
}
catch (FileNotFoundException)
{
}
BookList bookList = JsonConvert.DeserializeObject<BookList>(jsonText);
JObject jObj = JObject.Parse(jsonText);
if (!IsPostBack)
{
ddl.DataTextField = "id";
ddl.DataValueField = "id";
ddl.DataSource = bookList.bookList;
ddl.DataBind();
}
}
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
txtEnterID.Text = "";
}

现在,我已经设法填充了下拉列表,但是数小时的研究和绞尽脑汁,我找不到将其翻译成文本框的方法。目前我没有办法拥有文本框 a) 确定下拉列表正在使用哪个值 b) 使用该值来确定它使用的 JSON 文件的哪个变量以及来自哪个组。

现在我知道我很可能无法使用此方法填充文本框,并且可能需要从头开始。我不需要交给我的代码,但如果有人能给我一个示例片段,或者把我推到如何处理这项任务的写作轨道上,我将不胜感激。

请不要使用 Ajax、Jquery 或 java。

如果你坚持到最后,再次感谢你。

我认为您正在SelectedIndexChanged方法中寻找类似的东西:

//get your list of books
BookList bookList = JsonConvert.DeserializeObject<BookList>(jsonText);
//select the correct book from the list using Linq and the selected value from ddl
var book = bookList.bookList.Where(x => x.id == ddl.SelectedValue).FirstOrDefault();
//show the book properties in the textboxes
txtEnterID.Text = book.id;
txtTitle.Text = book.title;

我没有时间测试这段代码。但这个想法很简单。获取sender变量并将其转换为类DropDownList并使用其SelectedItem属性。

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
var selectedValue = (Book)((DropDownList)sender).SelectedItem.Value;
txtEnterID.Text = selectedValue.title;
}

希望对:)有所帮助

我不确定这是否有效,但这通常对我有用,所以我希望它也能对您有所帮助。

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
txtEnterID.Text = ddl.SelectedItem.Value.ToString();
}

另外,我可以问一下为什么您将下拉列表数据文本字段加载为 id 而不是书名?

最新更新