2017-03-15 63 views
0

我在部分視圖中有一個codemirror編輯器,在主視圖中有一個文件列表。一旦文件名被點擊,我想刷新編輯器。我嘗試了很多StackOverflow和其他網站上提供的解決方案,但沒有任何工作,這是我第一次使用Javascript,所以我無法弄清楚我做錯了什麼。ASP.NET MVC -Refresh CodeMirror編輯器onclick

這是我的代碼:

控制器:

public ActionResult Index() 
     { 
      StudentsCodes model = new StudentsCodes(); 
      model.Student = (Student)CurrentUser; 
      var user = UserManager.FindById(((Student)CurrentUser).InstructorID); 
      model.Instructor =(Instructor) user; 
      return View(model); 
     } 
public PartialViewResult DevelopmentPartial (StudentsCodes path) 
     { 
      return PartialView(path); 
     } 

主視圖:

<script type="text/javascript" src="~/Scripts/jquery.unobtrusive-ajax.js"></script> 
    <script type="text/javascript" src="~/Scripts/jquery-3.1.1.js"></script> 

    <ul id="tree"> 
     @foreach (var file in Directory.GetFiles(Server.MapPath("~/Content/" + Model.Student.UserName + "/CompilerProject/" + name))) 
      { 
       var filename = Path.GetFileName(file); 
       <li id="filelist" onclick="@(Model.path = "~/Content/" + Model.Student.UserName + "/CompilerProject/src/" + @filename)"> 
        <span class="glyphicon glyphicon-file"></span> 
        @filename 
       /li> 
       } 

    <div id="partial"> 
     @{ 
      Html.RenderPartial("DevelopmentPartial",null); 
     } 

    </div> 
    <script> 
     $(document).ready(function() { 
      $("#filelist").click(function (e) { 
       @{Html.RenderAction("DevelopmentPartial", Model); 
       } 
      }); 
     }); 
    </script> 

局部視圖:

@using (Html.BeginForm()) 
     { 
      var fileContents= ""; 
      if (Model==null) 
      { 
       fileContents = ""; 
      } 
      else 
      { 
       fileContents = System.IO.File.ReadAllText(Server.MapPath(Model.path)); 
      } 
       @Html.TextArea("code", fileContents, new { id = "code" }) 
     } 

我不能分配ID S代表列表中的元素,因爲它們的數量是在編譯時未知的,當用戶添加或刪除文件,它的變化,這就是爲什麼大多數提供的解決方案沒有工作。這裏的結果是3個編輯器重疊並顯示最後一個文件的內容。並且<li>項目不可點擊。我在代碼中做錯了什麼?

編輯: 更新腳本以下後:

<script> 
     $(document).ready(function() { 
      $(".filelist").on("click",function (e) { 
       $("#partial").load('DevelopmentPartial'); 

      }); 
     }); 
    </script> 

它刷新局部視圖,但編輯始終是空的,而Model總是。使用「onclick」更新模型是否是錯誤的?

回答

0

如果有人遇到同樣的問題,我解決它通過在列表改變ID來上課,然後使用這個腳本:

<div id="partial"> 
    @{ 
     Html.RenderAction("DevelopmentPartial", new { path1 = Model.path}); 
    } 
</div> 


<script> 
    $(document).ready(function() { 
     $('.filelist').on('click', function (e) { 
      alert('Im clicked on filePath = ' + $(this).attr('value')); 
      var filePath = $(this).attr('value'); //value is attribute set in Html 
      $('#partial').load('DevelopmentPartial', { path1: filePath }); 
     }); 
    }); 
</script> 

而且控制器:

public PartialViewResult DevelopmentPartial(string path1) 
    { 
     modelSC.path = path1; 
     return PartialView(modelSC); 

    } 

其中modelSC是控制器中的全局變量。