2015-01-20 1 views
0

mvc4를 사용하여 이전 데이터를 편집하고 싶습니다. 예를 들어 도시 이름을 첸나이 (모델에서 채워지는 드롭 다운 목록)에서 푸네로 변경해야합니다. 누구든지 나를 인도 할 수 있습니까? 다음은 엔티티 프레임 워크를 사용하지 않고 MVC4에서 편집 기능을 수행하는 방법은 무엇입니까?

내 코드입니다 :

컨트롤러 :

[HttpGet] 
    public ActionResult display(Create model) 
    { 

     List<Create> city = new List<Create>(); 
     using (connectionstring pcs = new connectionstring()) 
     { 
      city = pcs.grp.OrderBy(a => a.cityname).ToList(); 

     } 
     ViewBag.cityname = new SelectList(city, "cityname", "cityname"); 
     return View(model); 

    } 

    [HttpPost, ActionName("display")] 
    [ValidateAntiForgeryToken] 
    public ActionResult display1(Create cg) 
    { 

     List<Create> city = new List<Create>(); 
     using (connectionstring pcs = new connectionstring()) 
     { 
      city = pcs.grp.OrderBy(a => a.cityname).ToList(); 

     } 
    ViewBag.cityname = new SelectList(city, "cityname", "cityname"); 

     if (ModelState.IsValid) 
     { 


      string oldgcityname = cg.cityname.ToString().Trim(); 
    using (NpgsqlConnection conn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["portalconnectionstring"].ConnectionString)) 
      { 

         using(NpgsqlCommand cmd=new NpgsqlCommand("update tblcity set cityname='$1' where cityname='"+oldcityname+"'",conn)) 
      cmd.ExecuteNonQuery(); 



    } 
     } 

     return View(cg); 
    }  

보기 :

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
@Html.AntiForgeryToken() 

<table> 
<tr> <td> 
    <div class="editor-label"> 
     @Html.Label("Select old cityname") 
    </div> </td> 
    <td> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.cityname,@ViewBag.cityname as SelectList,"select") 
     @Html.ValidationMessageFor(model => model.cityname) 
    </div> 

    </td></tr> 
<tr> <td> 
    <div class="editor-label"> 
     @Html.Label("Enter new cityname") 
    </div> </td> 
    <td> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.cityname) 
     @Html.ValidationMessageFor(model => model.cityname) 
    </div> 

    </td></tr> 
    <tr><td> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
    </td></tr> 

+0

어떤 문제가 있습니까? –

+0

모델 속성과'ViewBag' 속성이 같은 이름 인'DropDownListFor()'를 사용할 수 없습니다. 그리고 나서 동일한 속성 이름을 다시 사용하는'EditorFor()'가 있습니다 (다시 게시시 무시됩니다) –

+0

예. 이 시나리오를 수행하는 방법을 모르겠습니다. 이 작업을 수행하는 다른 방법이 있습니까? – user3793029

답변

1

이전 및 새 이름에 대한 속성을 포함하는 뷰 모델을 작성

보기 모델

public class CreateVM 
{ 
    [Display(Name = "Old name")] 
    [Required] 
    public string OldName { get; set; } 
    [Display(Name = "New name")] 
    [Required] 
    public string NewName { get; set; } 
    public SelectList CityList { get; set; } 
} 

컨트롤러

[HttpGet] 
public ActionResult Edit(CreateVM model) 
{ 
    CreateVM model = new CreateVM(); 
    ... 
    model.CityList = new SelectList(city, "cityname", "cityname"); 
    return View(model); 
} 

[HttpPost] 
public ActionResult Edit(CreateVM model) 
{ 
    // the model now contains the selected old name and its new name 
} 

보기

@model CreateVM 
@using(Html.BeginForm()) 
{ 
    @Html.LabelFor(m => m.OldName) 
    @Html.DropDownListFor(m => m.OldName, Model.CityList, "-Please select-") 
    @Html.ValidationMessageFor(m => m.OldName) 
    @Html.LabelFor(m => m.NewName) 
    @Html.TextBoxFor(m => m.NewName) 
    @Html.ValidationMessageFor(m => m.NewName) 
    <input type="submit" /> 
} 

그리고 존 소총이 언급 한 것처럼, 매개 변수화 된 SQL을 사용

!

+0

안녕하세요. 회신 해 주셔서 감사합니다. "{"\ r \ n (138,10)을 실행하는 동안 아래와 같은 오류가 발생합니다. 오류 3004 : 138 행부터 시작하는 조각 매핑 문제 : 속성에 대해 지정된 매핑이 없습니다. Create.citylist, Set.cityList in Set grp. \ r \ n 엔티티가 [mvcdemo.Models.Create] 형식 인 경우 : – user3793029

+0

@user3793029, 오류는 내 코드와 관련이 없습니다. 답변 : 데이터베이스를 업데이트하기위한 코드로 인해 코드를 디버그합니다. 오류를 일으키는 행을 확인하기 위해 코드를 디버그합니다. "오류 3004 : 행에서 시작하여 조각을 매핑하는 중 문제가 발생했습니다." –

+0

안녕하세요, 솔루션을 얻었습니다. 언급 한대로 newcityname이라는 새 필드를 추가했습니다.하지만 테이블에 newcityname을 추가하고 싶지 않습니다. 지금은 추가했는데 잘 작동합니다. 감사합니다. 감사합니다. 너는 너의 도움을 너무 많이한다. – user3793029

관련 문제