ساخت یک Form Generator ساده در MVC
نویسنده: سیروان عفیفی
تاریخ: ۱۳۹۳/۰۹/۱۲ ۱۷:۲۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
namespace SimpleFormGenerator.DomainClasses
{
public class Form
{
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Field> Fields { get; set; }
}
public class Field
{
public int Id { get; set; }
public string TitleEn { get; set; }
public string TitleFa { get; set; }
public FieldType FieldType { get; set; }
public virtual Form Form { get; set; }
public int FormId { get; set; }
}
public enum FieldType
{
Button,
Checkbox,
File,
Hidden,
Image,
Password,
Radio,
Reset,
Submit,
Text
}
} namespace SimpleFormGenerator.DataLayer.Context
{
public class SimpleFormGeneratorContext : DbContext, IUnitOfWork
{
public SimpleFormGeneratorContext()
: base("SimpleFormGenerator") {}
public DbSet<Form> Forms { get; set; }
public DbSet<Field> Fields { get; set; }
public DbSet<Value> Values { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Value>()
.HasRequired(d => d.Form)
.WithMany()
.HasForeignKey(d => d.FormId)
.WillCascadeOnDelete(false);
}
}
} @model SimpleFormGenerator.DomainClasses.Form
@{
ViewBag.Title = "صفحه ایجاد یک فرم";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div>
<span>عنوان</span>
<div>
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
</div>
</div>
<div>
<div>
<input type="submit" value="ذخیره" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("بازگشت", "Index")
</div> @model SimpleFormGenerator.DomainClasses.Field
@{
ViewBag.Title = "CreateField";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div>
<span>عنوان انگلیسی</span>
<div>
@Html.EditorFor(model => model.TitleEn, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.TitleEn, "", new { @class = "text-danger" })
</div>
</div>
<div>
<span>عنوان فارسی</span>
<div>
@Html.EditorFor(model => model.TitleFa, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.TitleFa, "", new { @class = "text-danger" })
</div>
</div>
<div>
<span>نوع فیلد</span>
<div>
@Html.EnumDropDownListFor(model => model.FieldType, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.FieldType, "", new { @class = "text-danger" })
</div>
</div>
<div>
<span>فرم</span>
<div>
@Html.DropDownList("FormId", (SelectList)ViewBag.FormList)
@Html.ValidationMessageFor(model => model.FormId, "", new { @class = "text-danger" })
</div>
</div>
<div>
<div>
<input type="submit" value="ذخیره" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("بازگشت ", "Index")
</div>
@using SimpleFormGenerator.DomainClasses
@model IEnumerable<SimpleFormGenerator.DomainClasses.Field>
@{
ViewBag.Title = "نمایش فرم";
}
<div>
<div>
<div>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
for (int i = 0; i < Model.Count(); i++)
{
if (Model.ElementAt(i).FieldType == FieldType.Text)
{
<text>
<input type="hidden" name="[@i].FieldType" value="@Model.ElementAt(i).FieldType" />
<input type="hidden" name="[@i].Id" value="@Model.ElementAt(i).Id" />
<input type="hidden" name="[@i].FormId" value="@Model.ElementAt(i).FormId" />
<div>
<label>@Model.ElementAt(i).TitleFa</label>
<div>
<input type="text" name="[@i].TitleEn" />
</div>
</div>
</text>
}
}
<div data-formId ="@ViewBag.FormId">
<div>
<input type="submit" value="ارسال فرم" />
</div>
</div>
}
</div>
<div>
@Html.ActionLink("بازگشت", "Index")
</div>
</div>
</div> for (int i = 0; i < Model.Count(); i++)
{
// code
} if (Model.ElementAt(i).FieldType == FieldType.Text)
{
// code
} <input type="text" name="[@i].TitleEn" />
[@i].FieldTyp
public class Value
{
public int Id { get; set; }
public string Val { get; set; }
public virtual Field Field { get; set; }
[ForeignKey("Field")]
public int FieldId { get; set; }
public virtual Form Form { get; set; }
[ForeignKey("Form")]
public int FormId { get; set; }
} [HttpPost]
public ActionResult ShowForm(IEnumerable<Field> values)
{
if (ModelState.IsValid)
{
foreach (var value in values)
{
_valueService.AddValue(new Value { Val = value.TitleEn, FormId = value.FormId, FieldId = value.Id});
_uow.SaveAllChanges();
}
}
return View(values);
} public class FieldValidation
{
public int Id { get; set; }
public string Rule { get; set; }
public virtual Field Field { get; set; }
} <div class="col-md-4">
<input type="text" name="[@i].TitleEn" data-val="true" data-val-required="عنوان را وارد نمائید" id="[@i].TitleEn" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="[@i].TitleEn" data-valmsg-replace="true"></span>
</div> public IList<Value> GetValues(int formId)
{
return _values.Include(x => x.Field)
.Where(value => value.FormId == formId)
.ToList();
} public class row
{
public int Id { get; set; }
public string username{ get; set; }
public string ip{ get; set; }
.
.
public virtual Field Field { get; set; }
public int fieldId { get; set; }
} public class Value
{
public string Val { get; set; }
public virtual Field Field { get; set; }
[ForeignKey("Field")]
[key]
public int FieldId { get; set; }
public virtual row row { get; set; }
[ForeignKey("row")]
[key] public int rowid { get; set; }
}