我正在尝试创建一个系统,用于使用表单编辑 pdf 文件中的字段。编辑数据后,我想保存一个版本。但是,要求是系统应或多或少与任何使用表格的 pdf 一起使用。我对此的解决方案是我使用 iTextSharp 读取 pdf 中的字段并将其存储在模型内的 Dictionary 中。为了能够将字典存储在数据库中(使用实体框架),我制作了一个序列化程序,将字典与字符串连接/拆分。
现在问题来了:当我保存表单时,我的问题就开始了。数据很好地到达视图,但是从视图中出来并再次进入控制器,没有来自字典创建的字段的数据。我假设问题来自使用字典和动态构建表单,但我很难看到我将如何解决这个问题。
这是代码:
该模型:
public class Diplom
{
public string filnavn { get; set; }
public int Id { get; set; }
private Dictionary<string, string> _fields;
private DateTime datevalue;
// CTOR:
public Diplom()
{
_fields = new Dictionary<string, string>();
}
public DateTime BestaattTid
{
get
{
return datevalue.Date;
}
set
{
datevalue = value;
}
}
// Get/set, whole dictionary.
public Dictionary<string, string> Fields
{
get
{
return _fields;
}
set
{
_fields = value;
}
}
...
...
}
控制器中的方法:现在返回的方法基本上被注释掉了,我只是在那里使用一个断点来检查对象返回模型,这表明_field字典是空的。
//
// GET: /Diplom/Edit/5
public ActionResult Edit(int id)
{
using (var db = new ProjectContext())
{
var d = db.Diplomas.Find(id);
return View(d);
}
}
//
// POST: /Diplom/Edit/5
[HttpPost]
public ActionResult Edit(int id, Diplom returningmodel)
{
try
{
//var db = new ProjectContext();
//db.Entry(returningmodel).State = System.Data.EntityState.Modified;
//db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
最后是视图(Edit.cshtml):
@model txt.Models.Diplom
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Diplom</legend>
<div class="editor-label">
@Html.LabelFor(model => model.filnavn)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.filnavn)
@Html.ValidationMessageFor(model => model.filnavn)
</div>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.BestaattTid)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BestaattTid)
@Html.ValidationMessageFor(model => model.BestaattTid)
</div>
<h3>Dynamic fields</h3>
@foreach(var modelfield in Model.Fields )
{
<div class="editor-label">
@Html.Label(modelfield.Key)
</div>
<div class="editor-field">
@Html.EditorFor( m => modelfield.Value )
@Html.ValidationMessage( modelfield.Value)
</div>
}
<p><input type="submit" value="Save" /></p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
我该如何解决这个问题?