Eni*_*ate 0 c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 kendo-grid
我有一个文本框和按钮,当用户输入一个值和按下提交按钮时,我需要在同一视图中的Kendo UI Grid中显示这些值.
为此,我这样做了......
这是我的模特..
namespace KendoSampleMVCApp.Models
{
public class TextBoxGrid
{
public string EnteredValue { get; set; }
public List<EmployeeDetails> employees;
}
public class EmployeeDetails
{
public string EmployeeId { get; set; }
public string ManagerId { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制者
namespace KendoSampleMVCApp.Controllers
{
public class EnterValuesGridController : Controller
{
public ActionResult Index( TextBoxGrid model)
{
return View(GetEmployee());
}
[HttpPost]
public ActionResult PostValues(TextBoxGrid model)
{
TempData["enteringValue"] = model.EnteredValue;
return View(model);
}
public IEnumerable<EmployeeDetails> GetEmployee()
{
string enteredValueId =(string) TempData["enteringValue"];
string managerId = "M" +enteredValueId;
List<EmployeeDetails> empdtls = new List<EmployeeDetails>();
EmployeeDetails em1 = new EmployeeDetails();
em1.EmployeeId = enteredValueId;
em1.ManagerId = managerId;
empdtls.Add(em1);
return empdtls;
}
public ActionResult Orders_Read([DataSourceRequest]DataSourceRequest request)
{
return Json(GetOrders().ToDataSourceResult(request));
}
private IEnumerable<EmployeeDetails> GetOrders()
{
return GetEmployee();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的观点
@model KendoSampleMVCApp.Models.TextBoxGrid
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm("PostValues","EnterValuesGrid",FormMethod.Post))
{
<div>
<fieldset>
<legend>Enter Textbox Value</legend>
<div class="editor-field">
@Html.TextBoxFor(m=>m.EnteredValue)
</div>
<p>
<input type="submit" name="Submitbutton1" value="Submit1" />
</p>
</fieldset>
</div>
}
@model IEnumerable<KendoSampleMVCApp.Models.EmployeeDetails> <----- error at this line
<h2>Index</h2>
@using (Html.BeginForm())
{
@(Html.Kendo().Grid<KendoSampleMVCApp.Models.EmployeeDetails>()
.Name("grid")
.Columns(columns => {
columns.Bound(p => p.EmployeeId).Filterable(false).Width(100);
columns.Bound(p => p.ManagerId).Filterable(false).Width(100);
})
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.HtmlAttributes(new { style = "height:430px;" })
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Read(read => read.Action("Orders_Read", "EnterValuesGrid"))
)
)
}
Run Code Online (Sandbox Code Playgroud)
我在这行@model IEnumerable<KendoSampleMVCApp.Models.EmployeeDetails>
说错了
分析器错误消息:文件中只允许一个"模型"语句.
任何人都会建议任何想法,为什么我得到这个错误...我不能在同一视图中使用两个模型....
非常感谢 ...
编辑:我可以这样做在我的模型中......
public class ParentViewModel
{
public EmployeeDetails EmployeeDetails { get; set; }
public TextBoxGrid TextBoxGrid { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
答案是否定的,你不能在一个视图中使用两个模型.并且没有理由你需要.视图模型的重点是设计用于存储与其对应的视图的所有数据.
创建一个EnterValuesViewModel类,并使用来自两个业务实体的所有必要数据对其进行实例化.然后在此类中键入您的视图.
public class EnterValuesViewModel
{
public string EnteredValue { get; set; }
public List<EmployeeDetailsViewModel> Employees { get; set; }
}
public class EmployeeDetailsViewModel
{
public string EmployeeId { get; set; }
public string ManagerId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
视图:
@model EnterValuesViewModel
@Html.TextBoxFor(m=>m.EnteredValue)
@foreach(EmployeeDetailsViewModel emp in Model.Employees)
{
@* Stuff about each employee goes here *@
}
Run Code Online (Sandbox Code Playgroud)
或者,查看部分视图.