我有简单的输入表单(主要用于反馈),包含以下字段: 姓名,性别,手机号码,投诉文本。 (为了简化我没有在表格上提及任何POST动作或提交按钮)
目前,我创建了以下MVC结构:
public class ComplaintController
{
[HttpGet]
public ActionResult Index()
{
return View(); //This view displays the complaint form with all above fields
}
}
我阅读this以及其他一些建议使用@ Html.EditorFor的链接,因为它会根据模型数据类型创建UI。
目前,我没有将任何模型传递给[HttpGet]视图。如果我想使用@ Html.EditorFor,我需要将我的模型传递给[HttpGet] Index View,我该怎么做?什么是创建此类MVC表单的最佳实践?
答案 0 :(得分:1)
你的控制器:
public ActionResult Index()
{
whateverModel d = new whateverModel();
return View(d);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(whateverModel m)
{
if (ModelState.IsValid)
{
//its valid, update your database or do soemthing useful here
return RedirectToAction("Success");
}
//its not valid reload the page and let data annotations show the error
return View(m);
}
在控制器中输入代码后,您可以让visual studio自动创建视图。在您的控制器中,右键单击" d"作为回报查看(d);并选择"添加视图。"将模板更改为"创建"和Model的Model类(本例中为whateverModel)。它将为您导入的模型自动生成chtml页面,并且已经为您生成了编辑器。示例自动生成的视图如下。你可以从事造型等工作。
CSHTML:
@model YourSolution.Models.whateverModel
@{
ViewBag.Title = "Whatever";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Whatever</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Whatever</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.FriendlyName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FriendlyName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.FriendlyName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Order, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Order, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Order, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
答案 1 :(得分:1)
目前,我没有将任何模型传递给[HttpGet]视图。如果我想 要使用@ Html.EditorFor,我需要将我的模型传递给[HttpGet]索引 查看,我该怎么做?
嗨sahil,作为第一步,创建一个类似下面的模型类
public class FeedBack
{
public string Name{get;set;}
public string Gender{get;set;}
public int Mobile-Number{get;set;}
public string Complaint{get;set;}
// other additional fields
}
在控制器get方法中,传递如下的模型
public class ComplaintController
{
[HttpGet]
public ActionResult Index()
{
FeedBack OBJFeedback = new FeedBack();
return View(OBJFeedback);
}
}
在视图中,强烈键入此模型并将数据发布到控制器发布方法。
以下是强类型视图的示例:http://www.c-sharpcorner.com/UploadFile/abhikumarvatsa/strongly-typed-views-in-mvc/
重要说明:在get action方法中,由于您不希望在视图中默认显示任何值,即使您没有传递模型对象,它也会以相同的方式工作。
希望以上信息有用
由于
KARTHIK
答案 2 :(得分:0)
如果你想使用@ Html.EditorFor,那么你就把模型传递给视图。@ Html.EditorFor做什么?它使html标签像
<input class="text-box single-line" id="Name" name="Name" type="text" value="">
因此,如果您不想将模型传递给视图,那么您需要编写如上所述的原始html标记。保持html标签的name属性与mvc的model属性相同是很重要的,因为当你想将数据发布到控制器时,html标签的name属性将映射mvc model属性并在Controller方法中获取相应的值。
在视图(somthing.cshtml)中,您可以使用html标记,因为.cshtml ==。cs + html。所以整个代码看起来像
控制器方法
public ActionResult FeedBack()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult FeedBack(FeedBackModel Model)
{
var feedBack = Model;
return View();
}
和视图
<form action="/Home/FeedBack" method="post" id="feedBackForm">
@Html.AntiForgeryToken()
<hr>
<div class="form-group">
<div class="col-md-5">
<label for="Name">Name</label>
</div>
<div class="col-md-5">
<input class="text-box single-line" name="Name" type="text">
</div>
</div>
<div class="form-group">
<div class="col-md-5">
<label for="Name">Gender</label>
</div>
<div class="col-md-5">
<select name="Gender">
<option value="male">Male</option>
<option value="female">Female</option>
</select>
</div>
</div>
<div class="form-group">
<div class="col-md-5">
<label for="Name">MobileNumber</label>
</div>
<div class="col-md-5">
<input class="text-box single-line" name="MobileNumber" type="text">
</div>
</div>
<div class="form-group">
<div class="col-md-5">
<label for="Name">Complaint</label>
</div>
<div class="col-md-5">
<textarea class="text-box single-line" name="Complaint"></textarea>
</div>
</div>
<div class="col-md-5">
<input type="submit" value="Create" class="btn btn-default">
</div>
</form>
如果您不想使用提交,那么您可以使用ajax。