Asp.net mvc 从现有MVC创建
因此,我有我的模型,我想从下拉列表中选择一个与旧设备具有相同属性(除了学名)的现有设备创建一个新设备。我创建了一个函数,该函数将采用新设备名称和旧设备,并创建一个具有旧属性的新设备。我想知道在控制器和查看以从现有设备创建此新设备 这是我的模型Asp.net mvc 从现有MVC创建,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,因此,我有我的模型,我想从下拉列表中选择一个与旧设备具有相同属性(除了学名)的现有设备创建一个新设备。我创建了一个函数,该函数将采用新设备名称和旧设备,并创建一个具有旧属性的新设备。我想知道在控制器和查看以从现有设备创建此新设备 这是我的模型 public class ExistingPlant { public string selectedPlant { get; set; } public Dictionary<Guid,string> plantList {
public class ExistingPlant
{
public string selectedPlant { get; set; }
public Dictionary<Guid,string> plantList { get; set; }
}
公共类现有设备
{
公共字符串selectedPlant{get;set;}
公共字典目录{get;set;}
}
这是我的控制器代码
public ActionResult CreateFrom()
{
ExistingPlant existing = new ExistingPlant();
Dictionary<Guid, string> plants = new Dictionary<Guid, string>();
foreach(var item in context.Plants){
plants.Add(item.PlantId , item.ScientificName);
}
existing.plantList = plants;
existing.selectedPlant = "Value";
var plant = context.Plants.Where(d => d.ScientificName == existing.selectedPlant);
string temp = existing.selectedPlant;
Plant p = (Plant) plant;
CopyExisting(p,temp);
return View(existing);
}
public ActionResult CreateFrom()
{
ExistingPlant existing=新的ExistingPlant();
字典植物=新字典();
foreach(context.Plants中的var项){
plants.Add(item.PlantId,item.ScientificName);
}
existing.plantList=植物;
existing.selectedPlant=“Value”;
var plant=context.Plants.Where(d=>d.ScientificName==existing.selectedPlant);
字符串温度=现有。所选设备;
植物p=(植物)植物;
复制现有(p、temp);
返回视图(现有);
}
和我的视图代码:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset id="field">
<div>
<label> Scientific Name:</label>
</div>
<div class="editor-field">
@Html.EditorFor(m => m.selectedPlant)
@Html.ValidationMessageFor(m =>m.selectedPlant)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
@Html.DropDownListFor(
m => m.selectedPlant,
new SelectList(Model.plantList, "Key", "Value")
)
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
学名:
@Html.EditorFor(m=>m.selectedPlant)
@Html.ValidationMessageFor(m=>m.selectedPlant)
@Html.DropDownListFor(
m=>m.选择的工厂,
新建选择列表(Model.plantList,“键”、“值”)
)
}您需要在视图模型中为新名称设置一个属性,提交表单时,获取选定的植物,克隆它,根据视图模型更新科学名称并保存它 将视图模型更改为
public class CopyPlantVM
{
[Display(Name = "Existing Plant")]
[Required(ErrorMessage = "Please select an existing plant")]
public Guid ExistingPlant { get; set; }
public SelectList ExistingPlantList { get; set; }
[Display(Name = "New scientific name")]
[Required(ErrorMessage = "Please enter new scientific name")]
public string Name { get; set; }
}
以及
@model CopyPlantVM
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.ExistingPlant)
@Html.DropDownListFor(m => m.ExistingPlant, Model.ExistingPlantList, "Please select")
@Html.ValidationMessageFor(m => m.ExistingPlant)
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
<input type="submit" value="Create" />
}
你写的方法,不是给了你想要的吗?如果没有,,缺少什么?该方法是CopyExisting。它可以工作。我遇到的问题是使用dropdownlist中选定的植物从视图中输入的字符串创建一个新植物。我在将变量强制转换到植物中时也遇到了问题,因为我的函数采用的是植物而不是变量。你需要为新植物名称添加一个额外的属性植物。复制现有工厂的代码应该在POST方法中,而不是GET方法中。如何将var转换为工厂?这给了我一个错误我很快会补充答案
public ActionResult CreateFrom()
{
CopyPlantVM model = new CopyPlantVM();
ConfigureViewModel(model);
return View(model);
}
[HttpPost]
public ActionResult CreateFrom(CopyPlantVM model)
{
if (!ModelState.IsValid)
{
ConfigureViewModel(model);
return View(model);
}
// Get the selected plant
Plant existingPlant = db.Plants.Where(p => p.PlantID = model.ExistingPlant).FirstOrDefault();
// Create a new plant based on existing plant but with new name
Plant newPlant = new Plant
{
ScientificName = model.Name,
// set other properties based on existing plant
};
db.Plants.Add(newPlant);
db.SaveChanges();
return RedirectToAction(...);
}
private void ConfigureViewModel(CopyPlantVM model)
{
model.ExistingPlantList = new SelectList(db.Plants, "PlantId", "ScientificName");
}